Docker服务命令
安装好Docker后,Docker会自动配置一个名为docker
的服务,需要手动启动这个服务。下列是操作服务的命令说明。
# 启动docker服务 systemctl start docker # 停止docker服务 systemctl stop docker # 重启docker服务 systemctl restart docker # 查看docker服务状态 systemctl status docker # 设置开机启动docker服务 systemctl enable docker # 查看docker概要信息 docker info # 查看docker帮助文档 docker --help
操作示例:
[root@cxypa ~]# systemctl start docker [root@cxypa ~]# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since 五 2022-12-30 17:15:40 CST; 6min ago Docs: https://docs.docker.com Main PID: 46425 (dockerd) Tasks: 9 Memory: 25.3M CGroup: /system.slice/docker.service └─46425 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Docker镜像相关命令
镜像介绍
Docker镜像是由文件系统叠加而成(是一种文件的存储形式);是docker中的核心概念,可以认为镜像就是对某些运行环境或者软件打的包,用户可以从docker仓库中下载基础镜像到本地,比如开发人员可以从docker仓库拉取(下载)一个只包含centos7系统的基础镜像,然后在这个镜像中安装jdk、mysql、Tomcat和自己开发的应用,最后将这些环境打成一个新的镜像。开发人员将这个新的镜像提交给测试人员进行测试,测试人员只需要在测试环境下运行这个镜像就可以了,这样就可以保证开发人员的环境和测试人员的环境完全一致。
docker images 查看镜像
命令说明:
# 查看本机所有拥有的Docker镜像 docker images # 查看本机所有拥有的Docker镜像,仅显示镜像ID docker images -q
操作示例:
[root@cxypa ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [root@cxypa ~]#
效果说明:
可以看到,当前系统中没有任何镜像。
名称 |
说明 |
REPOSITORY |
镜像的名称 |
TAG |
镜像的标签 (是可以省略,默认是latest) |
IMAGE ID |
镜像的ID |
CREATED |
镜像的创建日期(不是获取该镜像的日期) |
SIZE |
镜像的大小 |
在Centos 7中镜像都是存储在/var/lib/docker目录下
docker search 搜索镜像
命令说明:
# 到 Docker Hub 仓库上搜索镜像 docker search 镜像名称
操作示例:
[root@cxypa docker]# docker search redis NAME DESCRIPTION STARS OFFICIAL AUTOMATED redis Redis is an open source key-value store that… 11685 [OK] bitnami/redis Bitnami Redis Docker Image 236 [OK] redislabs/redisinsight RedisInsight - The GUI for Redis 76 redislabs/redisearch Redis With the RedisSearch module pre-loaded… 56 # 省略其他 [root@cxypa docker]#
效果说明:
名称 |
说明 |
NAME |
镜像的名称 |
DESCRIPTION |
镜像的描述 |
STARS |
用户的评价,评价数量越高说明越受欢迎 |
OFFICIAL |
是否官方的镜像 |
AUTOMATED |
是否由Docker Hub自动构建流程创建的镜像 |
在命令行搜索不太方便,推荐去Docker Hub 上搜索镜像:http://hub.docker.com
docker pull 拉取镜像
命令说明:
# 从 Docker Hub 仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本 docker pull 镜像名称
操作示例:
[root@cxypa docker]# docker pull redis:6.2.8 # 指定下载 redis的6.2.8版本 6.2.8: Pulling from library/redis 3f4ca61aafcd: Pull complete c3775af77098: Pull complete # 省略其他 Status: Downloaded newer image for redis:6.2.8 docker.io/library/redis:6.2.8 [root@cxypa docker]# [root@cxypa docker]# [root@cxypa docker]# docker pull redis # 没有指定 tag 和 docker pull redis:latest 一样,表示下载最新版本 Using default tag: latest latest: Pulling from library/redis 3f4ca61aafcd: Already exists # 省略其他 Status: Downloaded newer image for redis:latest docker.io/library/redis:latest [root@cxypa docker]#
再次查看镜像:
[root@cxypa docker]# [root@cxypa bin]# docker images # 可以看到当前系统中有两个redis镜像 REPOSITORY TAG IMAGE ID CREATED SIZE redis 6.2.8 c250e371c399 8 days ago 113MB redis latest 0256c63af7db 8 days ago 117MB [root@cxypa bin]# [root@cxypa bin]# docker images -q c250e371c399 0256c63af7db [root@cxypa bin]#
docker rmi 删除镜像
命令说明:
# 根据镜像ID删除镜像 docker rmi 镜像ID # 删除所有镜像(谨慎操作) docker rmi `docker images -q`
操作示例:
[root@cxypa bin]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis 6.2.8 c250e371c399 8 days ago 113MB redis latest 0256c63af7db 8 days ago 117MB rabbitmq latest 3ddcc140fe5c 2 weeks ago 228MB [root@cxypa bin]# docker rmi c250e371c399 # 删除ID为c250e371c399的镜像 Untagged: redis:6.2.8 Untagged: redis@sha256:8cf5e722ac88a9fbc03aa9f3e66767d88f809596746a2d35b3e73b7cdfbf0870 Deleted: sha256:c250e371c3997705ad7f1725e30ccd26bb93b76e4a49be801bc28280c90ef310 # 省略其他 [root@cxypa bin]# docker images # 查看镜像,发现ID为c250e371c399的镜像已经被删除了 REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 0256c63af7db 8 days ago 117MB rabbitmq latest 3ddcc140fe5c 2 weeks ago 228MB [root@cxypa bin]# [root@cxypa bin]# docker rmi `docker images -q` # 删除所有镜像 Untagged: redis:latest Untagged: redis@sha256:8184cfe57f205ab34c62bd0e9552dffeb885d2a7f82ce4295c0df344cb6f0007 Deleted: sha256:0256c63af7dbecdb8783029521d1bcaf02d194d1451ad8cddc193352b6caedd0 # 省略其他 [root@cxypa bin]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [root@cxypa bin]#
docker save 导入镜像
每次都需要联网去 Docker Hub 仓库下载镜像到本地很慢,我们可以把下载到本地的镜像保存到文件中,以后需要再次使用该镜像时直接从文件中恢复镜像。
命令说明:
# 把指定的镜像保存到目标文件中 docker save -o [目标文件名称] [镜像名称]
操作示例:
[root@cxypa bin]# docker save -o /tmp/redis-latest.tar redis:latest # 把redis最新版本的镜像保存到/tmp中 [root@cxypa bin]# ll /tmp/ -rw-------. 1 root root 120566272 12月 30 18:28 redis-latest.tar [root@cxypa bin]#
docker load 加载镜像
命令说明:
# 加载本地文件中的镜像到Docker中 docker load -i 文件名
操作示例:
[root@cxypa bin]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 0256c63af7db 8 days ago 117MB [root@cxypa bin]# docker rmi redis:latest # 删除redis镜像 Untagged: redis:latest Untagged: redis@sha256:8184cfe57f205ab34c62bd0e9552dffeb885d2a7f82ce4295c0df344cb6f0007 Deleted: sha256:0256c63af7dbecdb8783029521d1bcaf02d194d1451ad8cddc193352b6caedd0 # 省略其他 [root@cxypa bin]# docker images # 已经没有镜像了 REPOSITORY TAG IMAGE ID CREATED SIZE [root@cxypa bin]# docker load -i /tmp/redis-latest.tar # 加载文件中的镜像到Docker中 8a70d251b653: Loading layer [==================================================>] 83.97MB/83.97MB # 省略其他 Loaded image: redis:latest [root@cxypa bin]# docker images # 可以看到已经加载好了redis的镜像 REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 0256c63af7db 8 days ago 117MB [root@cxypa bin]#
Docker容器相关命令
docker ps 查看容器
命令说明:
# 查看正在运行的容器 docker ps # 查看所有的容器,包含运行的和未运行的容器 docker ps -a # 查看最后一次运行的容器 docker ps -l
操作示例:
[root@cxypa ~]# docker ps # 查看正在运行的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 3 minutes ago Up 3 minutes mycentos72 [root@cxypa ~]# docker ps -a # 查看所有的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 3 minutes ago Up 3 minutes mycentos72 60b5fbad66f3 centos:7 "/bin/bash" 9 minutes ago Exited (0) 8 minutes ago mycentos7 [root@cxypa ~]# docker ps -l # 查看最后一次运行的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 3 minutes ago Up 3 minutes mycentos72 [root@cxypa ~]#
docker run 创建与运行容器
命令说明:
# 创建与运行容器 docker run # 参数说明 -i: 表示创建的容器可以交互 -t: 表示容器启动后会分配一个伪终端 --name: 给创建的容器取名字 -v: 表示目录映射关系,第一个是宿主机目录,第二个是容器的目录 -d: 创建一个守护式容器在后台运行 -p: 表示端口映射,第一个是宿主机端口,第二个是容器的端口
以交互式创建并运行容器,启动完成后直接进入当前容器。使用exit
命令退出容器。需要注意的是以此种方式启动容器,如果退出容器则容器会进入停止状态。
创建交互式容器操作示例:
[root@cxypa ~]# docker pull centos:7 # 拉取centos7的镜像 [root@cxypa ~]# docker run -it --name mycentos7 centos:7 /bin/bash # 创建并启动名称为mycentos7的交互式容器 [root@60b5fbad66f3 /]# [root@60b5fbad66f3 /]# [root@60b5fbad66f3 /]# ls / anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin [root@60b5fbad66f3 /]# exit exit [root@cxypa ~]# docker ps # 退出容器则容器会进入停止状态 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@cxypa ~]# [root@cxypa ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 60b5fbad66f3 centos:7 "/bin/bash" 4 minutes ago Exited (0) 2 minutes ago mycentos7 [root@cxypa ~]#
守护式容器是一直运行的,exit
只是退出终端,该容器还在后台运行。
创建守护式容器操作示例:
[root@cxypa ~]# docker run -di --name mycentos72 centos:7 # 创建并启动守护式容器 65f48e62c42b11ae64b5b48220877029cd4e07fe9e9d42b29702fe119c19933c [root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 9 seconds ago Up 7 seconds mycentos72 [root@cxypa ~]# docker exec -it mycentos72 /bin/bash # 进入容器打开终端进行交互 [root@65f48e62c42b /]# ls / anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin [root@65f48e62c42b /]# exit exit [root@cxypa ~]#
docker exec 进入容器
命令说明:
# 进入容器 docker exec 容器名称或容器ID 一条命令 # 进入容器,打开终端 docker exec -it mycentos72 /bin/bash # 选项 -i: 表示创建的容器可以交互 -t: 表示容器启动后会分配一个伪终端
操作示例:
[root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 13 minutes ago Up 13 minutes mycentos72 [root@cxypa ~]# docker exec mycentos72 ls /tmp # 进入容器仅执行一条命令就退出容器 ks-script-DrRL8A yum.log [root@cxypa ~]# [root@cxypa ~]# docker exec -it mycentos72 /bin/bash # 进入容器,打开终端 [root@65f48e62c42b /]# ll /tmp total 4 -rwx------. 1 root root 836 Nov 13 2020 ks-script-DrRL8A -rw-------. 1 root root 0 Nov 13 2020 yum.log [root@65f48e62c42b /]#
docker logs 查看容器日志
命令说明:
# 查看日志 docker logs -f 容器名称|容器ID
操作示例:
[root@cxypa hello]# docker logs -f mycentos72 # 目前容器没有任何日志,所以什么都看不到
docker stop 停止容器
命令说明:
# 停止正在运行的容器 docker stop 容器名称|容器ID
操作示例:
[root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 21 minutes ago Up 21 minutes mycentos72 [root@cxypa ~]# docker stop mycentos72 mycentos72 [root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@cxypa ~]#
docker kill 停止容器
命令说明:
# 停止正在运行的容器 docker kill 容器名称|容器ID
操作示例:
[root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 28 minutes ago Up 2 minutes mycentos72 60b5fbad66f3 centos:7 "/bin/bash" 34 minutes ago Up 4 minutes mycentos7 [root@cxypa ~]# docker kill mycentos7 mycentos7 [root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 28 minutes ago Up 3 minutes mycentos72 [root@cxypa ~]#
docker start 启动容器
命令说明:
# 启动处于停止状态容器 docker start 容器名称|容器ID
操作示例:
[root@cxypa ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 23 minutes ago Exited (137) 57 seconds ago mycentos72 60b5fbad66f3 centos:7 "/bin/bash" 29 minutes ago Exited (0) 28 minutes ago mycentos7 [root@cxypa ~]# docker start mycentos72 # 根据容器名称启动处于停止状态容器 mycentos72 [root@cxypa ~]# docker start 60b5fbad66f3 # 根据容器ID启动处于停止状态容器 60b5fbad66f3 [root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 23 minutes ago Up 11 seconds mycentos72 60b5fbad66f3 centos:7 "/bin/bash" 30 minutes ago Up 2 seconds mycentos7 [root@cxypa ~]#
docker restart 重启容器
命令说明:
# 重启正在运行的容器 docker restart 容器名称|容器ID
操作示例:
[root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 25 minutes ago Up About a minute mycentos72 60b5fbad66f3 centos:7 "/bin/bash" 31 minutes ago Up About a minute mycentos7 [root@cxypa ~]# [root@cxypa ~]# docker restart mycentos72 # 重启正在运行的容器,通过STATUS可以看到重启容器的运行时间 mycentos72 [root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 25 minutes ago Up 7 seconds mycentos72 60b5fbad66f3 centos:7 "/bin/bash" 32 minutes ago Up 2 minutes mycentos7 [root@cxypa ~]#
docker pause 暂停容器
命令说明:
# 暂停正在运行的容器 docker pause 容器名称|容器ID
操作示例:
[root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 28 minutes ago Up 3 minutes mycentos72 [root@cxypa ~]# [root@cxypa ~]# [root@cxypa ~]# docker pause mycentos72 mycentos72 [root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 30 minutes ago Up 4 minutes (Paused) mycentos72
当执行docker pause
后容器的STATUS
为Up 4 minutes (Paused)
。可以看到容器进入了Paused
暂停状态,需要通过docker unpause
恢复容器运行。
docker unpause 恢复容器
命令说明:
# 恢复正在暂停的容器 docker unpause 容器名称|容器ID
操作示例:
[root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 28 minutes ago Up 3 minutes mycentos72 [root@cxypa ~]# [root@cxypa ~]# docker pause mycentos72 mycentos72 [root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 30 minutes ago Up 4 minutes (Paused) mycentos72 [root@cxypa ~]# [root@cxypa ~]# docker unpause mycentos72 mycentos72 [root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65f48e62c42b centos:7 "/bin/bash" 30 minutes ago Up 4 minutes mycentos72 [root@cxypa ~]#
docker inspect 查看容器详细信息
命令说明:
# 查看容器的容器详细信息 docker inspect 容器名称或容器ID # 查看容器的IP docker inspect 容器名称或容器ID | grep -i ipaddr
操作示例:
[root@cxypa ~]# docker inspect mycentos72 # 查看容器的容器详细信息 [ { "Id": "65f48e62c42b11ae64b5b48220877029cd4e07fe9e9d42b29702fe119c19933c", "Created": "2022-12-31T07:22:55.702363745Z", "Path": "/bin/bash", "Args": [], "State": { "Status": "running", "Running": true, "FinishedAt": "2022-12-31T07:48:39.613528846Z" } 省略其他信息 } ] [root@cxypa ~]# [root@cxypa ~]# docker inspect mycentos72 | grep -i ipaddr # 查看容器的IP "SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2", [root@cxypa ~]#
docker rm 删除容器
命令说明:
# 删除指定的容器,只能删除未运行的容器 docker rm 容器名称|容器ID # 强行删除指定的容器,运行的容器也能删除 # docker rm -f 容器名称|容器ID # 删除所有容器 docker rm `docker ps -a -q`
操作示例:
[root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cc78e127d20e centos:7 "/bin/bash" 4 seconds ago Up 3 seconds mycentos75 65f48e62c42b centos:7 "/bin/bash" 44 minutes ago Up 18 minutes mycentos72 [root@cxypa ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cc78e127d20e centos:7 "/bin/bash" 8 seconds ago Up 7 seconds mycentos75 eb83f8060424 centos:7 "/bin/bash" 22 seconds ago Exited (0) 17 seconds ago mycentos74 d309e8db67c6 centos:7 "/bin/bash" 31 seconds ago Exited (0) 28 seconds ago mycentos73 65f48e62c42b centos:7 "/bin/bash" 44 minutes ago Up 18 minutes mycentos72 60b5fbad66f3 centos:7 "/bin/bash" 50 minutes ago Exited (137) 15 minutes ago mycentos7 [root@cxypa ~]# docker rm mycentos74 # 删除未运行的容器 mycentos74 [root@cxypa ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cc78e127d20e centos:7 "/bin/bash" 39 seconds ago Up 39 seconds mycentos75 d309e8db67c6 centos:7 "/bin/bash" About a minute ago Exited (0) 59 seconds ago mycentos73 65f48e62c42b centos:7 "/bin/bash" 44 minutes ago Up 19 minutes mycentos72 60b5fbad66f3 centos:7 "/bin/bash" 51 minutes ago Exited (137) 16 minutes ago mycentos7 [root@cxypa ~]# docker rm mycentos72 # 只能删除未运行的容器 Error response from daemon: You cannot remove a running container 65f48e62c42b11ae64b5b48220877029cd4e07fe9e9d42b29702fe119c19933c. Stop the container before attempting removal or force remove [root@cxypa ~]# docker rm -f mycentos72 # 强行删除指定的容器,运行的容器也能删除 mycentos72 [root@cxypa ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cc78e127d20e centos:7 "/bin/bash" About a minute ago Up About a minute mycentos75 d309e8db67c6 centos:7 "/bin/bash" About a minute ago Exited (0) About a minute ago mycentos73 60b5fbad66f3 centos:7 "/bin/bash" 51 minutes ago Exited (137) 16 minutes ago mycentos7 [root@cxypa ~]# docker rm -f `docker ps -a -q` # 删除所有容器 cc78e127d20e d309e8db67c6 60b5fbad66f3 [root@cxypa ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@cxypa ~]#
docker commit 将容器保存为镜像
docker commit 可以将配置好的容器重新保存为新镜像 ,让容器得到重复使用,不需要重新配置。
操作步骤
- 在前面的
cnginx
容器部署简单的网页hello.html
操作示例:
[root@cxypa ~]# docker exec -it cnginx /bin/bash # 进入容器 root@91db07de1cdf:/# cd /usr/share/nginx/html/ root@91db07de1cdf:/# echo "Hello Docker Nginx" >> hello.html # 生成htllo.html root@91db07de1cdf:/usr/share/nginx/html# ls 50x.html hello.html index.html root@91db07de1cdf:/usr/share/nginx/html# exit # 退出容器 exit
- 创建根据容器生成新的镜像
命令说明:
# 创建根据容器生成新的镜像 docker commit 容器名 新镜像名
操作示例:
[root@cxypa ~]# docker commit cnginx nginx/new sha256:dbd096999fd1922ff55067f5da04808fa4e6b113624b6629c0bede5b6ce64f5b
- 使用新镜像创建容器
操作示例:
[root@cxypa ~]# docker run -di --name cnginxnew -p 1180:80 nginx/new 1c3aacce6d0ab153d016b44a0d5b2b41115231a4cce58e0ae55c84a199dbb3f8 [root@cxypa ~]#
- 宿主机访问新容器中的Nginx,可以看到能直接访问
hello.html
Docker容器文件复制
命令说明:
# 将Linux宿主机中的文件拷贝到容器 docker cp 源文件或目录 容器名称:容器目录 # 将容器中的文件拷贝到Linux宿主机 docker cp 容器名称:容器目录 目的地文件或目录
将Linux宿主机中的文件拷贝到容器
操作示例:
[root@cxypa ~]# echo hello > LinuxFile.txt # 在Linux宿主机中创建LinuxFile.txt文件 [root@cxypa ~]# cat LinuxFile.txt hello [root@cxypa ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 686c827fc458 centos:7 "/bin/bash" 3 seconds ago Up 2 seconds mycentos7 [root@cxypa ~]# docker cp LinuxFile.txt mycentos7:/ # 把宿主机中的LinuxFile.txt复制到mycentos7容器的/目录中 [root@cxypa ~]# docker exec -it mycentos7 /bin/bash # 进入容器 [root@686c827fc458 /]# ll # 查看容器 / 目录下文件,可以看到LinuxFile.txt文件已经复制过来了 total 16 -rw-r--r--. 1 root root 6 Dec 31 08:16 LinuxFile.txt -rw-r--r--. 1 root root 12114 Nov 13 2020 anaconda-post.log lrwxrwxrwx. 1 root root 7 Nov 13 2020 bin -> usr/bin # 省略其他 [root@686c827fc458 /]# cat LinuxFile.txt hello [root@686c827fc458 /]#
将容器中的文件拷贝到Linux宿主机
操作示例:
[root@686c827fc458 /]# touch mycentos7File.txt # 在容器中创建一个文件 [root@686c827fc458 /]# exit exit [root@cxypa ~]# docker cp mycentos7:/mycentos7File.txt /tmp # 将容器中的文件拷贝到Linux宿主机 [root@cxypa ~]# ll /tmp/ -rw-r--r--. 1 root root 0 12月 31 16:53 mycentos7File.txt [root@cxypa ~]#
Docker容器目录挂载
每次手动把宿主机的文件复制到容器中,或者将容器中的文件拷贝到宿主机很麻烦。可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器时添加-v
参数给容器挂载目录或文件。
命令说明:
# -v参数格式 宿主机目录:容器目录 # -v参数格式 宿主机文件:容器文件 # 创建并启动容器,挂载宿主机的/tmp/hello目录到容器的/tmp/hello目录 docker run -di -v /tmp/hello:/tmp/hello --name mycentos73 centos:7 # 创建并启动容器,挂载宿主机的/tmp/a.txt文件到容器的/tmp/a.txt文件 docker run -di -v /tmp/a.txt:/tmp/a.txt --name mycentos74 centos:7
操作示例:
[root@cxypa tmp]# mkdir /tmp/hello # 在宿主机器要挂载的目录 [root@cxypa tmp]# [root@cxypa hello]# docker run -di -v /tmp/hello:/tmp/hello --name mycentos73 centos:7 # 创建并启动容器,挂载宿主机的/tmp/hello目录到容器的/tmp/hello目录 45bcb4b4ca9519343f45f2232f3ef024bfc371a3802715603b6af09583239323 [root@cxypa tmp]# mkdir /tmp/hello/test01 # 在宿主机器挂载的目录中创建新文件夹test01 [root@cxypa tmp]# docker exec -it mycentos73 /bin/bash # 进入容器 [root@45bcb4b4ca95 /]# cd /tmp # 查看容器的/tmp目录,可以看到hello文件夹已经被挂载 [root@45bcb4b4ca95 tmp]# ll total 4 drwxr-xr-x. 3 root root 20 Dec 31 09:15 hello -rwx------. 1 root root 836 Nov 13 2020 ks-script-DrRL8A -rw-------. 1 root root 0 Nov 13 2020 yum.log [root@45bcb4b4ca95 tmp]# cd hello/ # 查看挂载的hello文件夹,可以看到宿主机新建的test01文件夹 [root@45bcb4b4ca95 hello]# ll total 0 drwxr-xr-x. 2 root root 6 Dec 31 09:15 test01 [root@45bcb4b4ca95 hello]# [root@45bcb4b4ca95 hello]# mkdir test02 # 在容器挂载的/tmp/hello文件夹中新建test02文件夹 [root@45bcb4b4ca95 hello]# exit exit [root@cxypa hello]# ll # 退出容器,到宿主机中也可以看到容器中创建的文件夹 总用量 0 drwxr-xr-x. 2 root root 6 12月 31 17:15 test01 drwxr-xr-x. 2 root root 6 12月 31 17:16 test02 [root@cxypa hello]#