Loading

Docker容器相关的命令

查看容器

docker ps [OPTIONS]

OPTIONS常用的参数:

  • -a: 查看所有容器
  • -l: 查看最近创建的容器
  • -n: 查看最后创建的n个容器

示例:

查看所有容器

$ docker ps -a
CONTAINER ID     IMAGE            COMMAND              CREATED         STATUS                   PORTS                   NAMES
  • CONTAINER ID: 容器ID
  • IMAGE: 所属镜像
  • COMMAND: 容器启动时执行的命令
  • CREATED: 创建时间
  • STATUS: 容器状态
  • PORTS: 端口
  • NAMES: 容器名称

查看最后创建的3个容器

docker ps -n 3

创建并启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS常用的参数:

  • --name: 为创建的容器命名
  • -i: 保持容器运行,通常与 -t 同时使用
  • -t: 启动容器后进入命令行,即分配一个伪终端
  • -d: 后台方式运行
  • -v: 表示宿主机目录和容器目录的映射关系
  • -p: 指定宿主机端口和容器端口的映射
  • -P: 随机指定宿主机的可用端口和容器端口的映射
  • --restart: 设置容器的重启策略,默认是no,不自动重启
    • --restart=no: 不自动重启。
    • --restart=on-failure[:max-retries]: 在容器非正常退出时(退出状态非0),才会重启容器,可以设置重启的次数。
    • --restart=unless-stopped: 除非明确停止或 Docker 本身停止或重新启动,否则重新启动容器。
    • --restart=always: 在容器退出时总是重启容器,不论容器状态如何。

通过镜像创建容器,运行容器并进入容器的 /bin/bash :

docker run -it --name 容器名称 镜像名称:标签 /bin/bash

示例:

$ docker run -it --name mycentos7 centos:7 /bin/bash

守护方式创建容器:

docker run -id --name 容器名称 镜像名称:标签

设置启动策略:

$ docker run --restart=always redis

在运行的容器中执行命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS常用的参数:

  • --detach, -d: 在后台运行命令
  • --interactive, -i: 即使没有附加也保持 STDIN 打开,和 -t 配合使用
  • --tty, -t: 分配一个伪终端
  • --env, -e: 设置环境变量
  • --env-file: 读取环境变量文件
  • --user, -u: 指定访问容器的用户名
  • --workdir, -w: 指定容器内执行命令的目录

进入容器的CLI

docker exec -it 容器名称|容器ID /bin/bash
docker exec -it 容器名称|容器ID bash

示例:

$ docker exec -it centos7 /bin/bash
$ docker exec -it centos7 bash

在指定目录执行命令

$ docker exec -it -w /home centos7 pwd
/home

启动和停止容器

启动容器:

docker start 容器名称|容器ID

停止容器:

docker stop 容器名称|容器ID

重启容器:

docker restart 容器名称|容器ID

示例:

$ docker stop centos7
$ docker start centos7
$ docker restart centos7

查看容器信息

docker inspect 容器名称|容器ID

示例: 查看容器centos7详细信息,输入部分内容如下:

$ docker inspect centos7
[
    {
        "Id": "32f812f5126f93fe2f60fd39eb5bb14623dd962517f1a76ac3795289c7829964",
        "Created": "2021-06-28T09:18:43.750614614Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 21044,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-06-28T09:35:26.210740682Z",
            "FinishedAt": "2021-06-28T09:33:42.196548945Z"
        },
        "Image": "sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf",
       ... 
]

直接输出容器的IP地址:

$ docker inspect --format='{{.NetworkSettings.IPAddress}}' centos7
172.17.0.4

删除容器

正在运行的容器无法被删除

删除指定容器:

docker rm 容器名称|容器ID

删除多个容器:

docker rm 容器名称|容器ID 容器名称|容器ID 

容器数据卷操作

创建容器的时候可以将宿主机的目录和容器内的目录映射起来。宿主机目录下文件内容的修改会影响到容器内的目录,反过来容器内的修改也会影响到宿主机。

当容器被删除的时候,宿主机的内容也不会被删除,目录挂载使用 -v 参数。

指定目录挂载

docker run -id -v /宿主机目录1:/容器目录1 -v /宿主机目录2:/容器目录2 镜像名

注:

  • 目录必须是绝对路径
  • 如果目录不存在,则会自动创建
  • 可以挂载多个数据卷

示例:

$ docker run -id -v /data/docker_data:/abc/testdata --name nginx02 nginx
74cd773ebf4e56884e4c7cf5534c6e37f23511aa20bb95e4ea3cc444880e8564
$ docker exec -it nginx02 /bin/bash
$ cd /abc/testdata

匿名挂载

匿名挂载不需要指定宿主机的目录,只要指定容器内目录即可。

docker run -id -v /容器目录 镜像名

示例:

$ docker run -id -v /usr/local/container_data --name nginx03 nginx

查看volume数据卷:

$ docker volume ls
DRIVER    VOLUME NAME
local     7fce5cd52db38d8c063495be3f604fa547dda0426f2a61ee1e2a04699b225bfe

查看nginx03信息:

$ docker inspect nginx03
...
"Mounts": [
	{
		"Type": "volume",
		"Name": "7fce5cd52db38d8c063495be3f604fa547dda0426f2a61ee1e2a04699b225bfe",
		"Source": "/var/lib/docker/volumes/7fce5cd52db38d8c063495be3f604fa547dda0426f2a61ee1e2a04699b225bfe/_data",
		"Destination": "/usr/local/container_data",
		"Driver": "local",
		"Mode": "",
		"RW": true,
		"Propagation": ""
	}
],
...

可以看到Mounts下显示了数据的挂载信息,其中Source中指定的 /var/lib/docker/volumes是宿主机数据卷目录

具名挂载

具名挂载就是给数据卷起了个名字,数据卷目录依然在/var/lib/docker/volumes

docker run -id -v 卷名:/容器目录 镜像名

示例:

$ docker run -id -v nginx_data:/usr/local/container_data --name nginx04 nginx

查看volume数据卷:

$ docker volume ls         
DRIVER    VOLUME NAME
local     7fce5cd52db38d8c063495be3f604fa547dda0426f2a61ee1e2a04699b225bfe
local     nginx_data

查看 /var/lib/docker/volumes/目录:

$ ls /var/lib/docker/volumes/
7fce5cd52db38d8c063495be3f604fa547dda0426f2a61ee1e2a04699b225bfe  backingFsBlockDev  metadata.db  nginx_data

查看nginx04信息:

$ docker inspect nginx04
...
"Mounts": [
    {
        "Type": "volume",
        "Name": "nginx_data",
        "Source": "/var/lib/docker/volumes/nginx_data/_data",
        "Destination": "/usr/local/container_data",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
    }
],
...

或者通过 docker volume inspect 数据卷名称 查看对应挂载的信息。

挂载时设置权限

挂载数据卷时可以设置只能在宿主机进行文件操作,不允许在容器内部进行文件操作

  • ro: 只读
  • rw: 读写

设置只读:

docker run -id --name nginx-1 -v /test_data/test_data:/test/container_data:ro nginx

进入该容器中进行文件操作

$ docker exec -it nginx-1 /bin/bash
root@79cd0defa4db:/# cd /test/container_data/
root@79cd0defa4db:/test/container_data# touch test.txt
touch: cannot touch 'test.txt': Read-only file system

发现目录是只读权限是无法进行文件操作的。

设置读写:

docker run -id --name nginx-2 -v /test2_data/test2_data:/test/container_data:rw nginx

数据卷容器

数据卷容器用来实现多个容器之间的数据同步,使用 --volumes-from 参数实现。

1.创建容器nginx05

$ docker run -id -v /mydata/my_nginx_data:/usr/local/nginx_data --name nginx05 nginx

2.创建容器 nginx06 和 nginx07 继承 nginx05

$ docker run -id --volumes-from nginx05 --name nginx06 nginx
$ docker run -id --volumes-from nginx05 --name nginx07 nginx

当把容器nginx05删除后,容器nginx06和nginx07依然可以访问 /usr/local/nginx_data 目录。

查看日志

docker logs [OPTIONS] CONTAINER|CONTAINER ID

Options常用的参数:

  • -f: 跟踪实时日志
  • --since: 显示自某个timestamp之后的日志
  • --tail: 显示多少行
  • -t: 显示时间戳

显示最后10行:

docker logs -f -t --tail 10 nginx

显示某个时间之后的日志:

docker logs -f -t --since="2021-07-01T12:12:00" nginx

查看容器运行进程信息

docker top CONTAINER [ps OPTIONS]

示例:

$ docker top nginx
UID             PID             PPID              C             STIME           TTY             TIME                CMD
root            36594           36575             2             13:53           ?               00:00:00            nginx -g daemon off;

拷贝文件

在容器和宿主机之间复制文件或文件夹。

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
  • SRC_PATH或DEST_PATH可以是文件或目录
  • 容器可以正在运行或已停止

从容器复制文件到宿主机

$ sudo docker cp d9b1a66e4eb0:/tmp/test.txt /tmp/

当宿主机的目录不存在时:

$ docker cp d9b1a66e4eb0:/tmp/test.txt aaa/
no such directory
$ docker cp d9b1a66e4eb0:/tmp/test.txt aaa/aaa
invalid output path: directory "/tmp/fabric-baas-var/aaa" does not exist

从宿主机复制文件到容器

$ docker cp a.txt mycentos:/
$ docker exec -it mycentos bash
[root@d9b1a66e4eb0 /]# ls
a.txt  anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

根据容器创建镜像

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS参数:

  • --author, -a: 设置作者
  • --change, -c: 使用Dockerfile指令来创建镜像
  • --message, -m: 提交时的说明信息
  • --pause, -p: 在提交期间暂停容器
$ docker commit nginx nginx:v1.0
sha256:8ee6f5fa5afacc523d87dd2fdef0896d6160cbc72b187ce8ef8c3bf233dcaa3b
$ docker images
REPOSITORY                                                           TAG             IMAGE ID       CREATED             SIZE
nginx                                                                v1.0            8ee6f5fa5afa   8 seconds ago       16MB
nginx                                                                latest          4f380adfc10f   2 weeks ago         133MB

容器导出和导入

容器导出

将本地的容器导出成文件

docker export [OPTIONS] CONTAINER

Options

  • --output, -o: 指定写入到文件
docker export -o testcentos7.tar centos7

容器导入

从归档文件中创建镜像

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

Options参数:

  • --change, -c: 应用Dockerfile指令创建镜像
  • --message, -m: 在导入镜像时设置提交信息
  • --platform: 如果服务器支持多平台,则设置平台
$ docker import -m 'import from testcentos7.tar' testcentos7.tar testcentos7:v1
sha256:a663ef26082e802fc6acbad194fb64eb300d3ffd3e21799e0ce249d0b5556082
$ docker images
REPOSITORY                                               TAG             IMAGE ID         CREATED            SIZE
testcentos7                                              v1              a663ef26082e     14 seconds ago     204MB
nginx                                                    latest          4f380adfc10f     2 weeks ago        133MB
posted @ 2021-07-14 11:44  charlatte  阅读(107)  评论(0编辑  收藏  举报