【Docker】docker常用命令


需要云服务器等云产品来学习Linux可以移步/-->腾讯云<--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。


目录

一、镜像仓库架构图

二、docker仓库命令

[1、登录仓库docker login](#1、登录仓库docker login)

[2、拉取镜像docker pull](#2、拉取镜像docker pull)

[3、推送镜像docker push](#3、推送镜像docker push)

[4、查找镜像docker search](#4、查找镜像docker search)

[5、登出仓库docker logout](#5、登出仓库docker logout)

三、docker镜像命令

[1、列出本地镜像docker images](#1、列出本地镜像docker images)

[2、查看镜像详细信息docker image inspect](#2、查看镜像详细信息docker image inspect)

[3、标记本地镜像,将其归入某一仓库docker tag](#3、标记本地镜像,将其归入某一仓库docker tag)

[4、删除镜像docker rmi/删除容器docker rm](#4、删除镜像docker rmi/删除容器docker rm)

[5、将指定的镜像打包成tar文件docker save](#5、将指定的镜像打包成tar文件docker save)

[6、将docker save的tar包还原回来docker load](#6、将docker save的tar包还原回来docker load)

[7、显示镜像历史docker history](#7、显示镜像历史docker history)

[8、删除不使用的镜像docker image prune](#8、删除不使用的镜像docker image prune)

四、容器命令

[1、创建一个新容器并运行一个命令docker run/创建一个新容器但不运行docker create(命令和docker run一样,docker run多一个-d选项)](#1、创建一个新容器并运行一个命令docker run/创建一个新容器但不运行docker create(命令和docker run一样,docker run多一个-d选项))

-i、-t、-d选项:-it搭配使用,-d后台运行

-p选项:指定端口映射

--name选项:在容器启动时为它取一个名字

[--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行](#--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行)

[-m :设置容器使用内存最大值(示例为500m)](#-m :设置容器使用内存最大值(示例为500m))

[--link=[]: 添加链接到另一个容器,让两个容器能相互访问](#--link=[]: 添加链接到另一个容器,让两个容器能相互访问)

[--rm :shell 退出的时候自动删除容器](#--rm :shell 退出的时候自动删除容器)

[2、列出容器docker ps](#2、列出容器docker ps)

[3、查看容器日志docker logs](#3、查看容器日志docker logs)

[4、将当前终端连接到正在运行的某个Docker容器的标准输入、输出和错误docker attach](#4、将当前终端连接到正在运行的某个Docker容器的标准输入、输出和错误docker attach)

[5、在容器中执行命令docker exec](#5、在容器中执行命令docker exec)

[6、将停止的容器重新启动docker start/将运行的容器停止docker stop](#6、将停止的容器重新启动docker start/将运行的容器停止docker stop)

[7、重启容器docker restart](#7、重启容器docker restart)

[8、强制退出容器docker kill](#8、强制退出容器docker kill)

[9、查看容器中运行的进程信息docker top](#9、查看容器中运行的进程信息docker top)

[10、显示容器资源的使用情况docker stats](#10、显示容器资源的使用情况docker stats)

[11、查看容器详细信息docker container inspect](#11、查看容器详细信息docker container inspect)

[12、查看指定容器所对外映射端口docker port](#12、查看指定容器所对外映射端口docker port)

[13、在容器和宿主机之间拷贝文件docker cp](#13、在容器和宿主机之间拷贝文件docker cp)

[14、 检查容器中文件结构的更改docker diff](#14、 检查容器中文件结构的更改docker diff)

[15、从容器中创建一个新的自定义镜像docker commit](#15、从容器中创建一个新的自定义镜像docker commit)

[16、暂停/取消暂停容器中的所有进程docker pause/docker unpause](#16、暂停/取消暂停容器中的所有进程docker pause/docker unpause)

[17、导出容器内容为tar包docker export/将导出的tar包还原为镜像docker import](#17、导出容器内容为tar包docker export/将导出的tar包还原为镜像docker import)

[18、阻塞运行直到容器停止,并打印退出码docker wait](#18、阻塞运行直到容器停止,并打印退出码docker wait)

[19、容器重命名docker rename](#19、容器重命名docker rename)

[20、删除所有停止的容器docker container prune](#20、删除所有停止的容器docker container prune)

[21、更新容器配置docker update](#21、更新容器配置docker update)

五、nginx

六、busybox


一、镜像仓库架构图

镜像仓库:存放镜像的仓库,每个镜像仓库包含多个tag标签

tag标签:每个标签对应一个镜像

二、docker仓库命令

docker指南:Docker Docs

docker官方仓库:https://hub.docker.com/

|---------------|-------------------|------|
| 命令 | 别名 | 功能 |
| docker login | | 登录仓库 |
| docker pull | docker image pull | 拉取镜像 |
| docker push | docker image push | 推送镜像 |
| docker search | | 查找镜像 |
| docker logout | | 登出仓库 |

1、登录仓库docker login

bash 复制代码
sudo docker login
sudo docker login -u jianglingyu

2、拉取镜像docker pull

从镜像仓库拉取或更新指定镜像

bash 复制代码
sudo docker pull nginx:1.23.4-perl
sudo docker pull nginx@sha256:55ef01aae23f582e98d9e91075caa0c96d9c2f2754d24cb0f2be5ca26620a212

3、推送镜像docker push

bash 复制代码
# 先改一个tag
sudo docker tag nginx:1.23.4-perl jianglingyu/test_repository:666
sudo docker push jianglingyu/test_repository:666

一般去hub.docker.com网站里找,较少使用命令。

bash 复制代码
sudo docker search nginx
# 查找星数大于10的nginx
sudo docker search -f stars=10 nginx

5、登出仓库docker logout

bash 复制代码
sudo docker logout

三、docker镜像命令

1、列出本地镜像docker images

bash 复制代码
sudo docker images
# 查找带有nginx相关的镜像
sudo docker images nginx
sudo docker images nginx:1.23.4-perl # 冒号后面必须输入完整
# 顺带显示sha256摘要信息
sudo docker images --digests
# -f代表过滤,比jianglingyu/test_repository:666早创建的镜像
sudo docker images -f before=jianglingyu/test_repository:666

2、查看镜像详细信息docker image inspect

bash 复制代码
sudo docker image inspect jianglingyu/test_repository:666

比如启动nginx容器,就可以通过该命令查看nginx的启动方式(Cmd字段)和端口(ExposedPorts字段)

3、标记本地镜像,将其归入某一仓库docker tag

和docker push配合使用

bash 复制代码
sudo docker tag nginx:1.23.4-perl jianglingyu/test_repository:666
# 或者使用image id进行打标签
sudo docker tag 15578d966674 jianglingyu/test_repository:666
# 推送
sudo docker push jianglingyu/test_repository:666

4、删除镜像docker rmi/删除容器docker rm

bash 复制代码
sudo docker rmi hub.c.163.com/library/tomcat:latest
sudo docker rmi -f hub.c.163.com/library/tomcat:latest # 强制删除
# 删除镜像时,存在引用
[jly@VM-4-6-centos ~]$ sudo docker rmi hello-world:latest
Error response from daemon: conflict: unable to remove repository reference "hello-world:latest" (must force) - container 2e4b11735cb5 is using its referenced image d2c94e258dcb
[jly@VM-4-6-centos ~]$ sudo docker rm 2e4b11735cb5 # 移除容器
2e4b11735cb5
[jly@VM-4-6-centos ~]$ sudo docker rmi hello-world:latest
Untagged: hello-world:latest
Untagged: hello-world@sha256:4bd78111b6914a99dbc560e6a20eab57ff6655aea4a80c50b0c5491968cbc2e6
Deleted: sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a
Deleted: sha256:ac28800ec8bb38d5c35b49d45a6ac4777544941199075dff8c4eb63e093aa81e

5、将指定的镜像打包成tar文件docker save

bash 复制代码
# 打包成tar
[jly@VM-4-6-centos busybox]$ sudo docker save -o busybox.tar busybox:1.36
[jly@VM-4-6-centos busybox]$ ls
busybox.tar
# 将多个镜像一起打包成tar
[jly@VM-4-6-centos busybox]$ sudo docker save -o busyboxs.tar busybox:1.36 ccr.ccs.tencentyun.com/jianglingyu/my_busybox:V1.1
[jly@VM-4-6-centos busybox]$ ls
busyboxs.tar  busybox.tar

6、将docker save的tar包还原回来docker load

bash 复制代码
sudo docker load -i busyboxs.tar -q # -q精简信息,不加q显示还原进度

两台服务器之间通过ssh传输文件scp myfile root@xxx.xxx.xxx.xxx:/filepath

7、显示镜像历史docker history

docker history显示每个层(layer)的创建者、创建时间、大小等信息。

bash 复制代码
[jly@VM-4-6-centos busybox]$ sudo docker history busybox:1.36 
IMAGE          CREATED       CREATED BY                        SIZE      COMMENT
3f57d9401f8d   2 weeks ago   CMD ["sh"]                        0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   ADD busybox.tar.xz / # buildkit   4.26MB    buildkit.dockerfile.v0

8、删除不使用的镜像docker image prune

bash 复制代码
[jly@VM-4-6-centos busybox]$ sudo docker image prune 
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

也可以加-a选项,将会清理所有不使用的镜像。

docker image prune命令可以删除以下类型的镜像

  1. 悬挂的镜像(dangling images): 这些是没有与任何容器关联的镜像,可能是之前构建的中间层镜像,或者由于某些原因没有被正确标记的镜像。
  2. 未被使用的本地镜像: 如果某个镜像没有被任何容器使用,它被认为是未被使用的。

这个命令的目的是为了清理系统中不再需要的镜像,以节省磁盘空间。在使用之前,需要确保没有重要的镜像会被删除,因为这个命令是不可逆的。

这个命令和docker rmi的区别在于docker rmi更倾向于手动删除某个镜像。

四、容器命令

1、创建一个新容器并运行一个命令docker run/创建一个新容器但不运行docker create(命令和docker run一样,docker run多一个-d选项)

○ **-d:**后台运行容器,并返回容器 ID;

○ **-i:**以交互模式运行容器,通常与 -t 同时使用;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

○ **-p:**指定端口映射,格式为:主机 ( 宿主 ) 端口 : 容器端口

○ **-t:**为容器重新分配一个伪输入终端,通常与 -i 同时使用;

○ **--name="nginx-lb":**为容器指定一个名称;

○ **-h "mars":**指定容器的 hostname;

○ **-e username="ritchie":**设置环境变量;

○ **--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2":**绑定容器到指定 CPU 运行;

○ **-m :**设置容器使用内存最大值;

○ **--network="bridge":**指定容器的网络连接类型;

○ **--link=[]:**添加链接到另一个容器;

○ **--volume , -v:**绑定一个卷

--rm:shell 退出的时候自动删除容器

-i、-t、-d选项:-it搭配使用,-d后台运行

bash 复制代码
sudo docker ps            # 查看当前正在运行的容器
sudo docker ps -a         # 曾经运行过或者已创建未运行的容器
sudo docker pull centos:7 # 拉取镜像
sudo docker run centos:7  # 运行centos7容器,执行默认的启动命令(/bin/bash,会直接退出)
sudo docker run -it centos:7 bash # 启动一个centos7交互式的 Bash 终端i:交互模式运行终端,为容器重新分配一个伪输入终端
sudo docker run nginx:1.23.4-perl # 前台运行nginx(不退出),执行默认的启动命令(启动nginx)
sudo docker run -d nginx:1.23.4-perl # 后台运行nginx

-p选项:指定端口映射

bash 复制代码
[jly@VM-4-6-centos nginx]$ sudo docker run -d -p 8050:80 nginx:1.23.4-perl
71400b8910d6a5aeabc81e68c83d4e4b2c01e256364bf68933f640ca1762ba87

如果没有用-p将端口映射出来:sudo docker run -d nginx:1.23.4-perl,外部浏览器是访问不到容器的nginx的端口的。

当然也可以用sudo docker run -d -P nginx:1.23.4-perl来随机映射端口sudo docker ps查看随机分配的端口。

--name选项:在容器启动时为它取一个名字

bash 复制代码
sudo docker run --name myNginx nginx:1.23.4-perl

--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行

bash 复制代码
[jly@VM-4-6-centos ~]$ sudo docker run -d --name myNginx --cpuset-cpus="0-9" nginx:1.23.4-perl
docker: Error response from daemon: Requested CPUs are not available - requested 0-9, available: 0-1.
See 'docker run --help'. # 可用核心数为0-1

[jly@VM-4-6-centos ~]$ sudo docker run -d --name MyNginx --cpuset-cpus="0-1" nginx:1.23.4-perl
c5720d9ba305e8e48d59653d926d2993315e2a389c831e8e3455361b5b8bffd9

-m :设置容器使用内存最大值(示例为500m)

bash 复制代码
[jly@VM-4-6-centos ~]$ sudo docker run -d --name MyNginx1 -m 500m nginx:1.23.4-perl
89c9282f55bee6f4d3d83a7bd4827bac1677849ed32c2d40b190fb8d9a8eb2db

--link=[]: 添加链接到另一个容器,让两个容器能相互访问

bash 复制代码
# 运行centos7容器
[jly@VM-4-6-centos ~]$ sudo docker run -it --name MyCentOS7 centos:7 bash
[root@32fc6c8c5808 /]# 
# 运行第二个centos7容器并对链接的容器改名
[jly@VM-4-6-centos ~]$ sudo docker run -it --name MyCentOS7_1 --link MyCentOS7:changeName centos:7 bash
# 第二个容器ping第一个容器,可以ping通。
[root@6bf58364ef6e /]# ping changeName
PING changeName (172.17.0.4) 56(84) bytes of data.
64 bytes from changeName (172.17.0.4): icmp_seq=1 ttl=64 time=0.101 ms
64 bytes from changeName (172.17.0.4): icmp_seq=2 ttl=64 time=0.050 ms
64 bytes from changeName (172.17.0.4): icmp_seq=3 ttl=64 time=0.053 ms
# 第一个容器ping第二个容器,ping不通(因为创建第一个容器的时候没有--link链接)
[root@32fc6c8c5808 /]# ping MyCentOS7_1
ping: MyCentOS7_1: Name or service not known
# 查看两个容器的/etc/hosts目录,在这个文件中添加ip即可
第一个:
[root@32fc6c8c5808 /]# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4      32fc6c8c5808
第二个:
[root@6bf58364ef6e /]#  cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4      changeName 32fc6c8c5808 MyCentOS7 # 保存第一个容器的ip
172.17.0.5      6bf58364ef6e											# 自己的ip

--rm :shell 退出的时候自动删除容器

带--rm,退出后并不会留下记录:

bash 复制代码
[jly@VM-4-6-centos ~]$ sudo docker run -it --name MyCentOS7_2 --rm centos:7
[root@da44dd4bf0e1 /]# exit
exit
[jly@VM-4-6-centos ~]$ sudo docker ps -a
CONTAINER ID   IMAGE               COMMAND                  CREATED        STATUS                      PORTS     NAMES
6bf58364ef6e   centos:7            "bash"                   3 hours ago    Exited (127) 3 hours ago              MyCentOS7_1
32fc6c8c5808   centos:7            "bash"                   3 hours ago    Exited (127) 2 hours ago              MyCentOS7
89c9282f55be   nginx:1.23.4-perl   "/docker-entrypoint...."   3 hours ago    Exited (0) 32 minutes ago             MyNginx1
c5720d9ba305   nginx:1.23.4-perl   "/docker-entrypoint...."   3 hours ago    Up 3 hours                  80/tcp    MyNginx

2、列出容器docker ps

bash 复制代码
sudo docker ps 
sudo docker ps -a  # 曾经运行过或者已创建未运行的容器
sudo docker ps -as # s:显示大小

3、查看容器日志docker logs

bash 复制代码
# 启动一个nginx
[jly@VM-4-6-centos ~]$ sudo docker run -d -p 8051:80 --name myNginx nginx:1.23.4-perl
e965415b65e7d0a02be0ec0ce0c640f7828113520b3ead38a5ac9c7b284c7bcd
# 直接docker logs查看日志
[jly@VM-4-6-centos ~]$ sudo docker logs myNginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/02/17 15:41:24 [notice] 1#1: using the "epoll" event method
2024/02/17 15:41:24 [notice] 1#1: nginx/1.23.4
2024/02/17 15:41:24 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2024/02/17 15:41:24 [notice] 1#1: OS: Linux 3.10.0-1160.71.1.el7.x86_64
......
# 加个-f,持续输出(刷新nginx的主页,会持续输出log)
[jly@VM-4-6-centos ~]$ sudo docker logs -f myNginx
# 打印最新的前5条log
[jly@VM-4-6-centos ~]$ sudo docker logs -f -n 5 myNginx

4、将当前终端连接到正在运行的某个Docker容器的标准输入、输出和错误docker attach

关键参数:

--sig-proxy:是否将所有信号代理,默认是true(退出将导致容器退出),若设置为false,则不会影响容器。

连接容器后将会接管该容器的标准输入、标准输出、标准错误,所以网页端一刷新,终端立马接收到相关log信息。若按下ctrl+c,该容器将会退出:

如果在退出时不想退出容器,则需要加上--sig-proxy=false将信号代理:

bash 复制代码
[jly@VM-4-6-centos ~]$ sudo docker attach --sig-proxy=false myNginx

5、在容器中执行命令docker exec

○ **-d:**分离模式,在后台运行;

○ **-i:**以交互模式运行容器,通常与 -t 同时使用;

○ **-t:**为容器重新分配一个伪输入终端,通常与 -i 同时使用;

○ **-e:**设置环境变量;

○ **-u/--user:**指定用户来执行命令

○ **-w/--workdir:**指定工作目录

bash 复制代码
# 进入容器,输入命令
[jly@VM-4-6-centos ~]$ sudo docker exec -it myNginx bash
root@e965415b65e7:/# curl 127.0.0.1 # 通过 HTTP 请求访问本地主机
<!DOCTYPE html>
<html>
<head>
......
# 持续在容器中输入命令
root@e965415b65e7:/# nginx -v
nginx version: nginx/1.23.4
# 输入exit退出
root@e965415b65e7:/# exit
exit
[jly@VM-4-6-centos ~]$ 

# 这两种方式都可以在容器中输入单条命令
[jly@VM-4-6-centos ~]$ sudo docker exec myNginx nginx -v
nginx version: nginx/1.23.4
[jly@VM-4-6-centos ~]$ sudo docker exec -it myNginx nginx -v
nginx version: nginx/1.23.4

6、将停止的容器重新启动docker start/将运行的容器停止docker stop

bash 复制代码
[jly@VM-4-6-centos ~]$ sudo docker stop myNginx
myNginx
[jly@VM-4-6-centos ~]$ sudo docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[jly@VM-4-6-centos ~]$ sudo docker start myNginx
myNginx
[jly@VM-4-6-centos ~]$ sudo docker ps 
CONTAINER ID   IMAGE               COMMAND                  CREATED        STATUS         PORTS                                   NAMES
e965415b65e7   nginx:1.23.4-perl   "/docker-entrypoint...."   23 hours ago   Up 7 seconds   0.0.0.0:8051->80/tcp, :::8051->80/tcp   myNginx

7、重启容器docker restart

它可以重启运行、停止甚至已退出的容器。

bash 复制代码
# 优雅的重启,给足容器时间善后资源
[jly@VM-4-6-centos ~]$ sudo docker restart MyCentOS7
MyCentOS7
# 不优雅的重启,不管容器是否在运行,先发个kill -9直接杀死再重启
[jly@VM-4-6-centos ~]$ sudo docker restart -s -9 MyCentOS7
MyCentOS7

8、强制退出容器docker kill

docker stop发送温柔的SIGTERM信号,docker kill发送暴力的SIGKILL信号。

bash 复制代码
sudo docker kill

9、查看容器中运行的进程信息docker top

例如有些容器如Nginx中就没有ps命令,要查看容器的进程信息就需要用docker top

bash 复制代码
[jly@VM-4-6-centos ~]$ sudo docker top myNginx
[jly@VM-4-6-centos ~]$ sudo docker stats

10、显示容器资源的使用情况docker stats

bash 复制代码
[jly@VM-4-6-centos ~]$ sudo docker stats # 实时刷新
[jly@VM-4-6-centos ~]$ sudo docker stats myNginx # 实时刷新
[jly@VM-4-6-centos ~]$ sudo docker stats -a # 连已经停止的容器都打印出来,没啥用
[jly@VM-4-6-centos ~]$ sudo docker stats --no-stream # 快照形式
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O     PIDS
e965415b65e7   myNginx   0.00%     2.336MiB / 1.952GiB   0.12%     28.5kB / 21.4kB   3.11MB / 0B   3

11、查看容器详细信息docker container inspect

bash 复制代码
[jly@VM-4-6-centos ~]$ sudo docker container inspect myNginx
[
    {
        "Id": "e965415b65e7d0a02be0ec0ce0c640f7828113520b3ead38a5ac9c7b284c7bcd",
        "Created": "2024-02-17T15:41:20.359522338Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
......

12、查看指定容器所对外映射端口docker port

bash 复制代码
[jly@VM-4-6-centos ~]$ sudo docker port myNginx
80/tcp -> 0.0.0.0:8051
80/tcp -> [::]:8051

13、在容器和宿主机之间拷贝文件docker cp

bash 复制代码
# 将容器myNginx中,路径为/usr/share/nginx/html/index.html的文件拷贝至宿主机当前目录
[jly@VM-4-6-centos ~]$ sudo docker cp myNginx:/usr/share/nginx/html/index.html .
Successfully copied 2.56kB to /home/jly/.

14、 检查容器中文件结构的更改docker diff

C:修改过;A:新增;D:删除

复制代码
[jly@VM-4-6-centos ~]$ sudo docker diff myNginx
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /run
A /run/nginx.pid
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
C /root
A /root/.bash_history

15、从容器中创建一个新的自定义镜像docker commit

○ **-a:**提交的镜像作者;

○ **-c:**使用Dockerfile指令创建镜像,可以修改启动指令;

○ **-m:**提交时的说明文字;

○ **-p:**在commit时,将容器暂停。

bash 复制代码
# 查看当前正在运行的镜像
[jly@VM-4-6-centos ~]$ sudo docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED        STATUS          PORTS                                   NAMES
e965415b65e7   nginx:1.23.4-perl   "/docker-entrypoint...."   47 hours ago   Up 21 minutes   0.0.0.0:8051->80/tcp, :::8051->80/tcp   myNginx
# 由运行中的容器myNginx创建一个新的镜像myNginx my_new_nginx
[jly@VM-4-6-centos ~]$ sudo docker commit myNginx my_new_nginx:v1.0
sha256:fa1552088c2d80faee9436b80ccf5927c14b8a7995f88a5c69d5301540b395c5
# 带参数
sudo docker commit -a 'jianglingyu' -m 'add files' -c 'CMD ["tail", "-f", "/etc/hosts"]' -p myNginx my_new_nginx:v2.0

每次commit,生成的镜像会保存当前容器的一些修改。

16、暂停/取消暂停容器中的所有进程docker pause/docker unpause

通过剥夺容器进程的时间片来暂停进程。

复制代码
# 暂停
[jly@VM-4-6-centos ~]$ sudo docker pause myNginx 
myNginx
# 取消暂停
[jly@VM-4-6-centos ~]$ sudo docker unpause myNginx
myNginx

17、导出容器内容为tar包docker export/将导出的tar包还原为镜像docker import

docker export命令仅导出容器的文件系统,不包括容器的元数据(例如标签、端口映射、卷等)或容器的运行状态。如果还原时需要这些信息,使用docker save/docker load来保存还原。

复制代码
# 为容器打包
[jly@VM-4-6-centos ~]$ sudo docker export -o myNginx.tar myNginx
# 将导出的包还原为镜像
[jly@VM-4-6-centos ~]$ sudo docker import myNginx.tar myNginxImpoet:v1.0
# -c 修改镜像的启动命令 -m描述信息
[jly@VM-4-6-centos ~]$ sudo docker import -c 'CMD ["nginx", "-g", "daemon off;"]' -m 'new commit' myNginx.tar myNginxImpoet:v1.0

18、阻塞运行直到容器停止,并打印退出码docker wait

复制代码
# docker wait容器,在被kill之后,退出码137
[jly@VM-4-6-centos ~]$ sudo docker wait myNginx1
137
# 杀掉容器
[jly@VM-4-6-centos ~]$ sudo docker kill myNginx1
myNginx

19、容器重命名docker rename

复制代码
[jly@VM-4-6-centos ~]$ sudo docker rename myNginx myNginx1

20、删除所有停止的容器docker container prune

复制代码
[jly@VM-4-6-centos ~]$ sudo docker container prune

21、更新容器配置docker update

○ **--cpus:**cpu数量;

○ **--cpuset-cpus:**使用哪几个cpu;

○ **-m/--memory:**内存限制;

○ **--memory-swap:**交换内存;

○ **--cpu-period:**用来指定容器对cpu的使用要在多长时间做一次重新分配;

○ **--cpu-quota:**用来指定这个周期内,最多可以有多少时间跑这个容器。

复制代码
# 更新容器内存限制为500m
[jly@VM-4-6-centos ~]$ sudo docker update --memory 500m --memory-swap -1 myNginx
myNginx

五、nginx

bash 复制代码
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 刷新本地存储库元数据缓存
yum makecache
sudo yum install nginx -y
# 启动nginx,可在浏览器中输入服务器IP地址来查看首页
sudo nginx

六、busybox

命令安装:

复制代码
# centos下载busybox
[jly@VM-4-6-centos busybox]$ wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64 --no-check-certificat
# 加上可执行权限
[jly@VM-4-6-centos busybox]$ chmod +x busybox
# 使用busybox
[jly@VM-4-6-centos busybox]$ ./busybox ls
busybox

使用docker安装:

复制代码
# 下载docker镜像
sudo docker pull busybox:1.36
# 打标签
sudo docker tag busybox:1.36 jianglingyu/busybox:v1.0
# 登录
sudo docker login
# push镜像到自己的仓库-a代表全部push
sudo docker push jianglingyu/busybox:v1.0 -a
相关推荐
礼拜天没时间.20 小时前
深入Docker架构——C/S模式解析
linux·docker·容器·架构·centos
猫头虎20 小时前
如何使用Docker部署OpenClaw汉化中文版?
运维·人工智能·docker·容器·langchain·开源·aigc
会周易的程序员20 小时前
openplc runtimev4 Docker 部署
运维·c++·物联网·docker·容器·软件工程·iot
小Pawn爷21 小时前
1.Docker基础
运维·docker·容器
chinesegf21 小时前
清理docker残留镜像images
运维·docker·容器
小Pawn爷21 小时前
2.Docker的存储
运维·docker·容器
广州中轴线21 小时前
OpenStack on Kubernetes 生产部署实战(十七)
容器·kubernetes·openstack
礼拜天没时间.1 天前
自定义镜像制作——从Dockerfile到镜像
linux·docker·容器·centos·bash
岁岁种桃花儿1 天前
注册中心宕机后,RPC调用还能成功吗?主流框架实测级分析
zookeeper·eureka·rpc
luffy54591 天前
windows下通过docker-desktop创建redis实例
windows·redis·docker·容器