一、容器创建
- 下载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
这是由于要删除的目标镜像中有容器存在,故无法删除镜像 ,先删除镜像中的容器,再删除该镜像