Docker容器

目录

1、创建容器 docker create

2、查看容器的运行状态 docker ps

3、启动容器 docker start

4、创建并启动容器 docker run

在后台持续运行 docker run 创建的容器

5、终止容器运行 docker stop/kill

6、删除容器 docker rm

7、进入容器 docker exec

 1、前台运行容器时进入容器,使用exit退出后,容器就停止了。

 2、后台运行容器,之后使用docker exec进入容器,exit退出,容器不会停止。

8、查看容器的元数据--docker inspect

9、docker system

docker system df

docker system events 等同于 docker events

docker system info 等同于 docker info

docker system prune

10、容器日志 docker logs

11、宿主机和容器之间文件复制

1、将宿主机的文件复制到容器中

2、将容器的文件复制到宿主机

12、容器的导出与导入(容器的迁移)


  # docker 命令帮助
Commands:
    attach    Attach local standard input,output,and error to a running container                 # 将本地标准输入、输出和错误附加到正在运行的容器
    commit    Create a new image from a container's changes # 提交当前容器为新的镜像
    cp        Copy files/folders between a container and the local filesystem   #在容器和本地文件系统之间复制文件/文件夹
    create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器
    diff      Inspect changes to files or directories on a container's filesystem
   # 检查对容器文件系统上的文件或目录的更改
    events    Get real time events from the server          # 从 docker 服务获取容器实时事件
    export    Stream the contents of a container as a tar archive     # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
    history   Show the history of an image                  # 展示一个镜像形成历史
    import    Create a new filesystem image from the contents of a tarball     # 从tar包中的内容创建一个新的文件系统映像[对应 export]
    inspect   Return low-level information on a container   # 查看容器详细信息
    kill      Kill a running container                      # kill 指定 docker 容器
    load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save]
    logs      Fetch the logs of a container                 # 输出当前容器日志信息
    pause     Pause all processes within a container        # 暂停容器
    port
    rename
    restart   Restart a running container                   # 重启运行的容器
    rm        Remove one or more containers                 # 移除一个或者多个容器
    rmi       Remove one or more images                 
              # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
    save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load]
    start     Start a stopped containers                    # 启动容器
    stats     Display a live stream of container(s) resource usage statistics  #显示容器资源使用统计数据的实时流
    stop      Stop one or more running containers           # 停止一个或多个运行中的容器
    tag        Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE  # 给源中镜像打标签
    top       Display the running processes of a container  # 显示容器正在运行的进程
    unpause   Unpause all processes within one or more containers     # 取消暂停一个或多个容器中的所有进程
    update    Update configuration of one or more containers  #更新一个或多个容器的配置
    wait      Block until one or more containers stop, then print their exit codes  #阻塞直到一个或多个容器停止,然后打印它们的退出代码
Run 'docker COMMAND --help' for more information on a command.

1、创建容器 docker create

就是将镜像加载到容器的过程。

新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。

格式:docker create [选项] 镜像
常用选项:
-i:让容器开启标准输入
-t:让 Docker 分配一个伪终端 tty
-it :合起来实现和容器交互的作用,运行一个交互式会话 shell 

2、查看容器的运行状态 docker ps

格式
docker ps [选项]

docker ps       #查看当前运行状态的容器
选项
-q         #只显示运行状态的容器的ID
-a         #显示所有的容器
-aq        #显示所有容器的IP
-s         #显示总的文件大小
-as        #显示所有容器的大小
-n 6       #查看最后创建的6个镜像
-f         #根据条件过滤显示的内容
-format    #指定返回值的模版文件
-l         #显示最近创建的容器
-no-trunc  #不间断输出




[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS    PORTS     NAMES
6f9f69b097a0   nginx:latest   "/docker-entrypoint.…"   16 seconds ago   Created             recursing_swanson
容器的ID号      加载的镜像      运行的程序                   创建时间          当前的状态   端口映射    名称

  

3、启动容器 docker start

格式:docker start 容器的ID/名称
docker start 2b3a87b5eeaa
docker ps -a

4、创建并启动容器 docker run

可以直接执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令。

注意:容器是一个与其中运行的 shell 命令共存亡的终端,命令运行容器运行, 命令结束容器退出。

       docker 容器默认会把容器内部第一个进程,也就是 pid=1 的程序作为docker容器是否正在运行的依据,如果docker容器中 pid = 1 的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。

当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是:

  1. 检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
  2. 利用镜像创建并启动一个容器;
  3. 分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
  4. 从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
  5. 分配一个地址池中的 IP 地址给容器;
  6. 执行用户指定的应用程序,执行完毕后容器被终止运行。
格式
docker run [选项] 镜像 [命令] [参数]

选项
-a     指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项
-d     后台运行容器,并返回容器ID
-i     以交互模式运行容器,通常与 -t 同时使用
-t     为容器重新分配一个伪输入终端,通常与 -i 同时使用
-P     随机端口映射,容器内部端口 随机 映射到主机的端口
-p     指定端口映射,格式为:主机(宿主)端口:容器端口
--name=        为容器指定一个名称
-dns-search    指定容器DNS搜索域名,默认和宿主一致
-h     指定容器的hostname
-m     设置容器使用内存最大值
-link=[ ]      连接到另一个容器
--privileged=true    授予此容器扩展特权,也就是开启特权模式; 这种模式下容器对docker宿主机拥有root访问权限。慎用!
--net/--network      指定网络模式



[root@localhost ~]# docker run centos:7 /usr/bin/bash -c ls /
[root@localhost ~]# docker ps -a   #会发现创建了一个新容器并启动执行一条 shell 命令,之后就停止了
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                      PORTS     NAMES
834ca8d0b7c8   centos:7       "/usr/bin/bash -c ls…"   19 seconds ago   Exited (0) 19 seconds ago             upbeat_hamilton

在后台持续运行 docker run 创建的容器


       需要在 docker run 命令之后添加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。(容器中的命令仍然在前台运行)

        使用-itd选项,可以创建并持续运行容器,即便进入容器后使用exit命令退出容器,也不会停止容器。

[root@localhost ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
31f9e237cec784175cd9599356c1d4d96ca1e4d1e7682e204b86f029dcecb26f
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                     PORTS     NAMES
31f9e237cec7   centos:7       "/usr/bin/bash -c 'w…"   3 seconds ago    Up 2 seconds                         flamboyant_liskov


[root@localhost ~]# docker run -itd --name test1 centos:7 /bin/bash
da55f60024564b9e2134df12824c8657b95d9e33fc224deed59397026f35ace2
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                      PORTS     NAMES
da55f6002456   centos:7       "/bin/bash"               7 seconds ago    Up 5 seconds                          test1

5、终止容器运行 docker stop/kill

格式:
docker stop 容器的ID/名称    #正常停止,可以给容器一个等待时间,以防止数据的丢失。
docker kill 容器的ID/名称    #强制停止,不给容器反应时间,可能造成数据丢失。
docker stop $(docker ps -aq)  #批量停止容器
docker ps -a | awk 'NR>=2 {print $1}' | xargs docker stop    #批量停止容器 

6、删除容器 docker rm

 不能删除运行状态的容器,需要先停止再删除。或者使用-f强制删除。

格式:docker rm <容器ID/名称> [-f]   #删除容器
docker rm $(docker ps -aq)          #批量删除所有容器
docker ps -a |awk 'NR>=2 {print $1}' | xargs docker rm   #批量删除所有容器

已停止的可以直接删 

7、进入容器 docker exec

       要进入容器进行命令操作时,可以使用 docker exec 命令进入运行中的容器。进入容器前,确保容器正在运行。

  • 我们通常会使用 docker  exec -it bash 进入容器并开启一个bash环境的伪终端。也可以将bash 换成其他一条命令,让容器执行完后,将结果输出到屏幕
  • 后面可以跟上 -c 选项  “命令序列" ,命令序列可以是多个命令,使用分号隔开,可以一次性执行多条命令。

docker run -it 会创建前台进程,但是会在输入exit后终止进程。

docker attach 会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止容器进程。

docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。

格式:docker exec -it 容器ID/名称 /bin/bash
 ​
 -i 选项表示让容器的输入保持打开。
 -t 选项表示让 Docker 分配一个伪终端。
 -it /bin/bash:进入容器时需要指定一个shell环境。

 1、前台运行容器时进入容器,使用exit退出后,容器就停止了。

[root@localhost ~]# docker run -it --name t3 centos:7 /bin/bash
[root@e909cb89aa4d /]# exit
exit
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                            PORTS     NAMES
e909cb89aa4d   centos:7       "/bin/bash"               19 seconds ago   Exited (0) 4 seconds ago                    t3
517344b41eab   centos:7       "/bin/bash"               21 hours ago     Exited (137) About a minute ago             t2
da55f6002456   centos:7       "/bin/bash"               21 hours ago     Up 21 hours                                 test1
2b3a87b5eeaa   nginx:latest   "/docker-entrypoint.…"   29 hours ago     Up 30 minutes                     80/tcp    heuristic_thompson

 2、后台运行容器,之后使用docker exec进入容器,exit退出,容器不会停止。

[root@localhost ~]# docker run -itd --name t4 centos:7
8b65edd88c09981bbbf716c4b24a5a9c9ba5e6ce233d4cf66a76c0245acd0c08
[root@localhost ~]# docker exec -it t4 /bin/bash
[root@8b65edd88c09 /]# exit
exit
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                       PORTS     NAMES
8b65edd88c09   centos:7       "/bin/bash"               51 seconds ago   Up 50 seconds                          t4
e909cb89aa4d   centos:7       "/bin/bash"               7 minutes ago    Exited (0) 7 minutes ago               t3
517344b41eab   centos:7       "/bin/bash"               21 hours ago     Exited (137) 8 minutes ago             t2

8、查看容器的元数据--docker inspect

格式:docker inspect 容器id/容器名称


[root@localhost ~]# docker inspect 8b65edd88c09

[root@localhost ~]# docker inspect -f '{{.State.Pid}}' 容器ID
#查看进程号

9、docker system

[root@localhost ~]# docker system --help

Usage:  docker system COMMAND

Manage Docker

Commands:
  df          Show docker disk usage    #显示docker磁盘使用情况
  events      Get real time events from the server    #从服务器获取实时事件
  info        Display system-wide information         #显示系统信息
  prune       Remove unused data        #删除不使用的数据

docker system df

       提供Docker整体磁盘使用率的概况,包括镜像、容器和(本地)volume。所以我们现在随时都可以查看Docker使用了多少资源。

[root@localhost ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          167         36      84.52GB   73.82GB (87%)
Containers      78          72      251.9MB   0B (0%)
Local Volumes   110         8       3.081GB   2.782GB(90%)
Build Cache     0           0         0B        0B

Images         #所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。
Containers     #运行的容器占用的空间,表示每个容器的读写层的空间。
Local Volumes   #容器挂载本地数据卷的空间。
Build Cache     #镜像构建过程中产生的缓存空间(只有在使用BuildKit时才有,Docker18.09以后可用)。
RECLAIMABLE     #是可回收大小

docker system events 等同于 docker events

获取docker系统实时事件,不包括容器内的。

docker system info 等同于 docker info

查看整个docker系统的信息

docker system prune

可以用于清理磁盘,删除关闭的容器、无用得数据卷和网络,以及dangling镜像(即无tag的镜像)

注意:此命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉。

[root@localhost ~]# docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
  -a, --all             Remove all unused images not just dangling ones   #删除所有未使用的构建缓存,而不仅仅是悬空的缓存
      --filter filter   Provide filter values (e.g. "label=<key>=<value>")  #提供过滤值
  -f, --force           Do not prompt for confirmation    #不提示确认
      --volumes         Prune volumes        #数据卷



[root@localhost ~]# docker system prune
WARNING! This will remove:
  - all stopped containers        #所有停止的容器
  - all networks not used by at least one container  #所有没有容器使用的网络
  - all dangling images           #所有悬空镜像即无tag的镜像
  - all dangling build cache      #所有悬空创建的缓存


[root@localhost ~]# docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them #所有没有容器使用的镜像
  - all build cache      #所有创建的缓存

 

10、容器日志 docker logs

 格式:
 docker logs [options] 容器ID/容器名

options

      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. "2013-01-02T13:23:37Z") or relative (e.g. "42m" for 42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. "2013-01-02T13:23:37Z") or relative (e.g. "42m" for 42 minutes)
-----------------------------------------------------------------------------------
      --details        显示提供给日志的额外详细信息
  -f, --follow         跟踪日志输出
      --since string   显示自时间戳之后的日志(例如“2013-01-02T13:23:37Z”)或相关日志(例如“42m”42分钟)
  -n, --tail string    从日志末尾开始显示的行数(默认为“全部”)
  -t, --timestamps     显示时间戳
      --until string   在时间戳(例如“2013-01-02T13:23:37Z”)或相对时间戳(例如“42m”42分钟)之前显示日志

 

[root@localhost ~]# docker run -itd -P nginx:latest
d6ca0d729ab071d820d6fd623e43017ec738e2b31d5919f9c64ab08f96a232bc
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS         PORTS                                     NAMES
d6ca0d729ab0   nginx:latest   "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   0.0.0.0:32769->80/tcp, :::32769->80/tcp   determined_nobel

浏览器使用宿主机IP加映射端口:192.168.247.160:32769

[root@localhost ~]# docker logs d6ca0d729ab0    #查看容器日志
192.168.247.1 - - [20/Apr/2023:10:32:03 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.247.160:32769/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48" "-"

 

 

 

11、宿主机和容器之间文件复制

1、将宿主机的文件复制到容器中

[root@localhost ~]# echo 222 > /opt/1.txt
[root@localhost ~]# docker cp /opt/1.txt d6ca0d729ab0:/tmp/   #将文件复制到容器
Successfully copied 2.05kB to d6ca0d729ab0:/tmp/
[root@localhost ~]# docker exec -it d6ca0d729ab0 /bin/bash
root@d6ca0d729ab0:/# cd /tmp
root@d6ca0d729ab0:/tmp# ls     #文件存在,复制成功
1.txt
root@d6ca0d729ab0:/tmp# cat 1.txt
222

2、将容器的文件复制到宿主机

root@d6ca0d729ab0:/# cd /tmp
root@d6ca0d729ab0:/tmp# echo 666 > ./6.txt
root@d6ca0d729ab0:/tmp# ls
1.txt  6.txt
root@d6ca0d729ab0:/tmp# exit
exit
[root@localhost ~]# docker cp d6ca0d729ab0:/tmp/6.txt ~/
Successfully copied 2.05kB to /root/
[root@localhost ~]# ls
6.txt 
[root@localhost ~]# cat 6.txt
666

12、容器的导出与导入(容器的迁移)

       用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。

       可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。(注意:导入文件后会生成镜像,但不会自动创建容器。)

#导出格式:
 docker export 容器ID/名称 > 导出文件名
 ​
#导入格式:
 cat 导出文件名 | docker import – 镜像名称:标签
导出主机
[root@localhost ~]# docker export d6ca0d729ab0 > mycentos7
[root@localhost ~]# scp ~/mycentos7 192.168.247.160:/root/


导入主机
[root@zbx-agent1 ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  mycentos7 
[root@zbx-agent1 ~]# cat mycentos7 | docker import - centos7:test
sha256:7c1ebe5d74ad7e89c3f366de73c0f27ccd5b6f2d8a925a74a8a067b6e9ff92dd
[root@zbx-agent1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@zbx-agent1 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos7      test      7c1ebe5d74ad   48 seconds ago   140MB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值