Docker容器管理


一、docker容器管理

1.1 容器查看-ps命令

显示本地容器列表,但是默认不显示关闭的容器,只显示运行中的容器,除非加上命令选项 -a

用法: docker ps [-a 显示所有容器,默认只显示运行的]

[root@zuolaoshi ~]# docker ps
CONTAINER ID  IMAGE   COMMAND   CREATED  STATUS  PORTS   NAMES

1.2、容器详细信息-inspect命令

显示镜像的详细信息

用法: docker inspect [镜像名称或者ID]

[root@zuolaoshi ~]# docker inspect ubuntu

1.3、容器创建-run命令

容器创建命令

用法: docker run [options] 镜像名称 常用参数:

参数 功能
--name 指定容器名字
-i --interactive 交互式启动
-t --tty /bin/bash 分配终端,创建一个伪终端,执行命令
-d --detach 后台执行,守护进程
-v --volume 目录映射,容器目录挂载到宿主机目录,格式: :<容器目录>
-p 指定端口映射,格式:主机(宿主)端口:容器端口
-P 随机端口映射,容器内部端口随机映射到主机的端口(49153起始 49153到65535)
-e username="tom " 设置容器中的环境变量
--network 指定网络
--rm 容器停止自动删除容器,自动清除挂在的卷
-u 以什么用户身份创建容器
-h 指定容器的 host name
-m 设置容器使用内存最大值
#后台执行容器
[root@zuolaoshi ~]# docker run -it --name ubuntu1 ubuntu
4e156cfeb2965f85a47e8511c7f92dc0a52d9f6b99b278c4b91b87b93dfdc49f

#但是看不到ubuntu1的进程
[root@zuolaoshi ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
# docker容器运行必须有一个进程, 如果没有进程执行,容器认为空闲,就会自行退出。
[root@zuolaoshi ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
4e156cfeb296   ubuntu    "/bin/bash"   44 seconds ago   Exited (0) 44 seconds ago             ubuntu1

#前台执行的容器
[root@zuolaoshi ~]# docker run -it --name ubuntu2  ubuntu /bin/bash
[root@ce604735e295 /]#
[root@ce604735e295 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@ce604735e295 /]# pwd
/
[root@ce604735e295 /]# uname -a
Linux ce604735e295 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
[root@ce604735e295 /]# exit
exit
[root@zuolaoshi ~]#

1.4、容器删除-rm命令

删除一个本地容器

用法: docker rm [容器名称或者ID] [–force]

默认删除的容器必须是关闭状态,建议如果希望删除一个运行的容器,可以先关闭在删除。 docker stop [镜像名称或者ID] 当然也可以在后面直接加上--force 强制删除一个运行中的容器

[root@zuolaoshi ~]# docker rm ubuntu1
ubuntu1
[root@zuolaoshi ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                      PORTS     NAMES
ce604735e295   ubuntu    "/bin/bash"   2 minutes ago   Exited (0) 51 seconds ago             ubuntu2
[root@zuolaoshi ~]# docker stop ubuntu2
[root@zuolaoshi ~]# docker rm ubuntu2
ubuntu2
[root@zuolaoshi ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                      PORTS     NAMES

1.5、容器执行命令-exec命令

在运行容器中执行一个命令,如果想在容器中执行一个命令,那么这个exec命令就很有用了。

用法: docker exec [容器名称或者ID] 命令

# 使用-dit参数让容器在后台继续执行。
[root@zuolaoshi ~]# docker run -dit --name ubuntu3  ubuntu
948d233eb6bfed27060163846ec2f43385c620671a7af189777884d55b946485
[root@zuolaoshi ~]# docker exec ubuntu3 ls /
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

1.6、容器信息输出-attach命令

将一个运行容器的标准输出、错误输出、标准输入调入前台 默认容器都会在后台运行,如果你想进入容器内,就可以使用该命令。这样你就可以交互式的在容器中执行命令了。

用法: docker attach [容器名称或者ID]

[root@zuolaoshi ~]# docker attach ubuntu3
[root@948d233eb6bf /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@948d233eb6bf /]# exit
  • Docker attach和Docker exec主要的区别在于它们启动的进程和它们的行为方式。
    • Docker attach在容器的当前进程上直接启动一个终端,并将该终端连接到容器的标准输入、标准输出和标准错误。这意味着我们只能在容器当前运行的进程中操作,而且如果我们退出该终端,容器也会被终止。
    • Docker exec在容器内启动一个新的进程,该进程可以在后台运行,不影响其他进程。这意味着我们可以在不打断容器正在运行的其他进程的情况下执行命令。
    • 从命令的使用方式来看,Docker attach通常用于调试容器内部的应用程序,并且在操作需要交互式输入和输出时很有用。Docker exec则通常用于在容器中执行命令,并且在需要在容器内部执行复杂操作时非常方便。
    • 最后需要注意的一点是,在使用Docker attach时,需要小心避免因为关闭连接而导致容器终止。如果需要在容器中执行命令而不影响容器的运行状态,请使用Docker exec命令。

1.7、容器启动-start命令

启动一个容器

用法: docker start [容器名称或者ID]

[root@zuolaoshi ~]# docker start ubuntu3
ubuntu3

1.8、停止一个容器-stop命令

关闭一个容器

用法: docker stop [容器名称或者ID]

[root@zuolaoshi ~]# docker stop ubuntu3
ubuntu3

1.9、重启一个容器-restart命令

重启一个容器

用法: docker restart [容器名称或者ID]

[root@zuolaoshi ~]# docker restart ubuntu3
ubuntu6

1.10、容器挂起-pause命令

挂起运行中的容器

用法: docker pause [容器名称或者ID]

[root@zuolaoshi ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
948d233eb6bf   ubuntu    "/bin/bash"   6 minutes ago   Up 3 seconds             ubuntu3
[root@zuolaoshi ~]# docker pause ubuntu3
ubuntu3
[root@zuolaoshi ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                   PORTS     NAMES
948d233eb6bf   ubuntu    "/bin/bash"   6 minutes ago   Up 10 seconds (Paused)             ubuntu3

1.11、容器恢复-unpause命令

恢复挂起容器

用法: docker unpause [容器名称或者ID]

[root@zuolaoshi ~]# docker unpause ubuntu3
ubuntu3
[root@zuolaoshi ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS          PORTS     NAMES
948d233eb6bf   ubuntu    "/bin/bash"   6 minutes ago   Up 34 seconds             ubuntu3

1.12、容器重命名-rename命令

重命名容器

用法: docker rename 容器名称 容器新名称

[root@zuolaoshi ~]# docker rename ubuntu3 ubuntu4
[root@zuolaoshi ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS              PORTS     NAMES
948d233eb6bf   ubuntu    "/bin/bash"   6 minutes ago   Up About a minute             ubuntu4

1.13、容器端口映射信息-port命令

显示容器与宿主机的端口隐射信息

用法: docker port [容器名称或者ID]

[root@zuolaoshi ~]# docker port 32fd02f05446
5000/tcp -> 0.0.0.0:5000

# 容器的TCP 5000端口与宿主机的所有IP的5000端口绑定

1.14、杀死一个或多个容器-kill命令

杀死运行的容器

用法: docker kill [镜像名称或者ID]

[root@zuolaoshi ~]# docker kill ubuntu4
ubuntu4
[root@zuolaoshi ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@zuolaoshi ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                       PORTS     NAMES
948d233eb6bf   ubuntu    "/bin/bash"   9 minutes ago   Exited (137) 4 seconds ago             ubuntu4

1.15、容器导出-export命令

将一个容器导出一个镜像为压缩文件

用法: docker export -o 导出后镜像文件名 [容器名称或者ID]

[root@zuolaoshi ~]# docker export -o zuolaoshi_ubuntu.tar ubuntu4
[root@zuolaoshi ~]# ls
anaconda-ks.cfg  ubuntu_base.tar  init.sh  zuolaoshi_ubuntu.tar

1.16、容器镜像导入到镜像库-import命令

将容器镜像导入到镜像库

用法: docker import 镜像文件名 镜像名:tag

[root@zuolaoshi ~]# docker import zuolaoshi_ubuntu.tar zj_ubuntu
sha256:80eecf935fa87d49f154b00b6630a966651b1a70c4042580c568a88808069679
[root@zuolaoshi ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
zj_ubuntu    latest    80eecf935fa8   2 seconds ago        231MB
ubuntu      latest    5d0da3dc9764   2 years ago         231MB

1.17、将容器生成镜像-commit命令

将改变后的容器直接变成镜像,一般指的是封装好业务的容器,直接封装成镜像

用法: docker commit [容器名称或者ID] 导出后镜像的名字:tag

[root@zuolaoshi ~]# docker commit  ubuntu4   zj_ubuntu_4
sha256:68421c5ca664de9f771e325cab0252b16700f2db4c5243d65706cf608b47633b

[root@zuolaoshi ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
zj_ubuntu_4   latest    68421c5ca664   29 seconds ago   231MB
zj_ubuntu      latest    80eecf935fa8   3 minutes ago    231MB
ubuntu         latest    5d0da3dc9764   2 years ago    231MB

1.18、容器与外部数据传输-cp命令

docker cp :用于容器与主机之间的数据拷贝。

语法 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH OPTIONS说明:

-L :保持源目标中的链接

# 将主机/data目录拷贝到容器96f7f14e99ab中,目录重命名为/www。
docker cp /data 96f7f14e99ab:/www

# 将主机/www/html目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /var/www/html 96f7f14e99ab:/www/

# 将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp  96f7f14e99ab:/www /tmp/