分享

牛牛牛!再也不用担心Docker命令记不住了,Docker必会命令,赶紧收藏,方便以后参考!

 率性而为 2024-05-23 发布于河北

大纲

Docker服务命令
Docker镜像相关命令
    镜像介绍
    docker images 查看镜像
    docker search 搜索镜像
    docker pull 拉取镜像
    docker rmi 删除镜像
    docker save 导入镜像
    docker load 加载镜像
Docker容器相关命令
    docker ps 查看容器
    docker run 创建与运行容器
    docker exec 进入容器
    docker logs 查看容器日志
    docker stop 停止容器
    docker kill 停止容器
    docker start 启动容器
    docker restart 重启容器
    docker pause 暂停容器
    docker unpause 恢复容器
    docker inspect 查看容器详细信息
    docker rm 删除容器
    docker commit 将容器保存为镜像
Docker容器文件复制
Docker容器目录挂载

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.
 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 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后容器的STATUSUp 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 可以将配置好的容器重新保存为新镜像 ,让容器得到重复使用,不需要重新配置。
操作步骤

  1. 在前面的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
  1. 创建根据容器生成新的镜像

命令说明:

# 创建根据容器生成新的镜像
docker commit 容器名 新镜像名

操作示例:

[root@cxypa ~]# docker commit cnginx nginx/new
sha256:dbd096999fd1922ff55067f5da04808fa4e6b113624b6629c0bede5b6ce64f5b
  1. 使用新镜像创建容器

操作示例:

[root@cxypa ~]# docker run -di --name cnginxnew -p 1180:80 nginx/new
1c3aacce6d0ab153d016b44a0d5b2b41115231a4cce58e0ae55c84a199dbb3f8
[root@cxypa ~]#
  1. 宿主机访问新容器中的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]#

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多