一、容器创建

  • 下载centos镜像
docker search centos
 docker pull centos:7
pull 镜像名:标签
  • 查看下载的容器
[root@bogon dockerfile]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   8 months ago   209MB
  • 创建一个centos7 容器
[root@bogon dockerfile]# docker create -it --name centos7  centos  /bin/bash
efafa7f5880b2a1cacb250f04f59c23b9bf277290435fb9dea711f1bdac15fe3

参数
-name:指定容器名称
-it:创建一个交互式容器,退出后容器容器停止运行
-id:创建一个守护容器,退出后容器不停止运行
-i:保持容器运行
-t:为容器重新分配一个伪输入终端
-d:以守护进程模式运行容器,退出后容器不会停止
-p:端口映射
-e:传递环境变量
-v:是volume简称 -v 宿主机目录:容器目录
-rm:在容器退出时自动清理容器内部的文件系统

二、运行容器

[root@bogon dockerfile]# docker start centos7
centos7
  • 查看已经启动的容器
[root@bogon dockerfile]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS          PORTS     NAMES
efafa7f5880b   centos    "/bin/bash"   7 minutes ago   Up 59 seconds             centos7

参数
-a: 展示当前正在运行的容器和历史运行过的容器-
-q: 只展示容器的id-
-l: 显示最近创建的容器-
-n: 显示最近n个创建的容器

  • 进入容器
[root@bogon dockerfile]# docker exec -it efafa7f5880b /bin/bash
[root@efafa7f5880b /]#
  • 容器命令区别

命令

内容

run

后面是一个镜像,创建并运行容器

start

后面是一个容器名,运行之前存在的容器

exec

在容器中启动一个新的终端进程。/bin/bash :表示新开一个终端进程,exit会结束新打开的进程,不影响容器运行

attach

直接进入容器启动命令的终端,不会启动新的终端进程,exit后终止当前容器

exit

退出并关闭容器

control+P+Q

退出不会关闭容器

三、容器内部搭建环境

  • 查看当前时区
[root@efafa7f5880b /]# date -R
Thu, 26 Aug 2021 03:50:06 +0000
时间格式化方式:
date +%F' '%H:%M:%S   => 年月日 时分秒:  2021-08-26 10:24:04
date +%F              => 年月日 : 2021-08-26
date +%s      =>时间戳:    1629973490
  • 设置为北京时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者
rm -f /etc/localtime
ln -sf  /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • 将时间写入bios ,防止重启失效
hwclock -w 或者 sudo hwclock --systohc
  • 设置开机问候语
echo  "Hello World !"  > /etc/motd
  • 清除缓存并退出容器
yum clean packages
exit

四、将容器打包发布

  • 提交容器信息
[root@bogon dockerfile]# docker commit -m="base conteos" -a="ciara" efafa7f5880b  mycentos7
sha256:b43ccf696cc6a7ed6c22e24c9c91d8e58d1606c99e55ae58bc065bffd7ca15f6

参数
-m:提交的描述信息
-a:指定镜像作者
-p:关闭镜像
efafa7f5880b : 容器ID
mycentos7 指定要创建的目标镜像名

  • 打开Docker hub 申请注册一个帐号 。然后创建仓库,指定仓库名称,在docker中登录。
[root@bogon dockerfile]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:  
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
  • 给镜像打标签, 标签名需和Docker Hub上新建的仓库名称一致,否则上传会失败
[root@bogon dockerfile]#  docker tag centos7  iongdoc/centos7:v1.0
  • 提交镜像
[root@bogon dockerfile]#  docker push  iongdoc/centos7:v1.0
The push refers to repository [docker.io/iongdoc/centos7]
cfbb34a2f255: Pushed 
2653d992f4ef: Mounted from library/centos 
v1.0: digest: sha256:e8667300f44674bed03fc2ec70a245df3b55c0a5cd68a7e8602e326455b61933 size: 741

五、DockerFIle 使用

  • 使用dockerFile创建容器
FROM centos:7
RUN rm -f /etc/localtime && ln -sf  /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "HELLO PHP">/etc/motd
CMD ["date"]
  • 构建容器
    第一次会下载官方镜像centos7依赖
[root@bogon centos7]# docker build -t date:v1.0 ./
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
 ---> 8652b9f0cb4c
Step 2/2 : RUN rm -f /etc/localtime && ln -sf  /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "HELLO PHP">/etc/motd
 ---> Running in 09118bba3230
Removing intermediate container 09118bba3230
 ---> 883636e77f34
Successfully built 883636e77f34
Successfully tagged date:v1.0

参数
-t:容器的名称和标签
./centos7/ 上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

  • 查看构建的镜像
    会有两个镜像,同一个Docker可以打不同的标签。
[root@bogon centos7]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
date               v1.0    e23095a1f8f7   About a minute ago   204MB
centos            7         8652b9f0cb4c   9 months ago         204MB
使用Dockerfile 创建的镜像要更小一点。
  • 创建容器并运行
[root@bogon centos7]# docker run -it --name showdate  date:v1.0 
Thu Aug 26 20:20:57 CST 2021
  • 查看运行的容器
    run 命令不传入/bin/bash运行之后就退出了,加上-a 可以展示所有容器
[root@bogon centos7]# docker ps -a
CONTAINER ID   IMAGE       COMMAND       CREATED              STATUS                          PORTS     NAMES
dfd497adf65d   date:v1.0   "/bin/bash"   8 seconds ago        Exited (0) 2 seconds ago                  showdate1
c2bd10cebd79   date:v1.0   "date"        About a minute ago   Exited (0) About a minute ago             showdate

六、删除本地镜像和容器

  • 根据镜像ID删除
[root@bogon dockerfile]# docker rmi 300e315adb2f
Untagged: centos:v1.1
Deleted: sha256:cb8c53a03013af7f4f798a6ea0b2a8f0a274af38eb553cbc26b4fac30bbabbad
Deleted: sha256:6a753a49bfd2f3897f5fb659858f4da012b25d2177ba942a64276344c45c3e83
  • 根据镜像名称删除
[root@bogon dockerfile]# docker rmi centos7
Untagged: centos7:latest
  • 删除容器
[root@bogon dockerfile]# docker rm efafa7f5880b
  • 删除失败报错
Error response from daemon: conflict: unable to delete 300e315adb2f (cannot be forced) - image has dependent child images
· 原因是有另外的 image FROM 了这个 image,可以使用下面的命令列出所有在指定 image 之后创建的 image 的父 image
[root@bogon dockerfile]# docker rmi 4caf1346be57
Error response from daemon: conflict: unable to delete 4caf1346be57 (must be forced) - image is referenced in multiple repositories
· 镜像id指向了两个repository,删除时可以用repository和tag的方式来删除。
Error response from daemon: conflict: unable to delete 300e315adb2f (must be forced) - image is being used by stopped container d5d67d10c0c2
这是由于要删除的目标镜像中有容器存在,故无法删除镜像 ,先删除镜像中的容器,再删除该镜像