Docker容器使用

容器来源于镜像。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker 面向对象
容器 对象
镜像

新建并启动容器

有了镜像才可以创建容器,创建容器并启动的格式如下:

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

IMAGE参数说明:

  • IMAGE:镜像的REPOSITORY+TAG

OPTIONS参数说明:

  • -a:指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项。

  • -d:后台运行容器,并返回容器ID。加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec。

  • -e:设置环境变量。例如:将mysql容器root用户的密码设为root

    docker run -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
  • -h:指定容器的hostname。

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

  • -m:设置容器使用内存最大值。

  • -P:随机端口映射,容器内部端口随机映射到主机的端口。例如:使用镜像mysql:5.7以后台模式启动一个容器,并将容器的3306端口映射到主机随机端口。

    docker run -P -d mysql:5.7
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口。例如:使用镜像mysql:5.7以后台模式启动一个容器,并将容器的3306端口映射到主机3307端口。

    docker run -p 3307:3306 -d mysql:5.7
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。

  • -v:绑定一个卷。例如:容器目录/etc/mysql/data映射到主机的/mydata/myql/data。

    docker run -p 3306:3306 -v /mydata/myql/data:/etc/mysql/data -d mysql:5.7
  • –cpuset:绑定容器到指定CPU运行。

  • –dns:指定容器使用的DNS服务器,默认和宿主一致。

  • –dns-search:指定容器DNS搜索域名,默认和宿主一致。

  • –env-file:从指定文件读入环境变量。

  • –expose:开放一个端口或一组端口。

  • –link:添加链接到另一个容器。

  • –name:为容器指定一个名称。例如:使用docker镜像mysql:5.7以后台模式启动一个容器,并将容器命名为mysql。

    docker run --name mysql -d mysql:5.7
  • –network:指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型。host 表示将主机的网络环境映射到容器中,容器的网络与主机相同。

  • –volume:绑定一个数据卷。-volume 选项是长选项,它有一个对应的短选项 -v,它们两个是等效的,即如下两个命令等效:

    docker run -td --name testCon --volume testA:/data alpine
    docker run -td --name testCon -v testA:/data alpine
  • –restart:用于指定自动重启docker容器策略

    • no 默认值,表示容器退出时,docker不自动重启容器

      docker run --restart=no [容器名]
    • on-failure 若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃

      docker run --restart=on-failure:3 [容器名]
    • always 容器退出时总是重启

      docker run --restart=always [容器名]
    • unless-stopped 容器退出时总是重启,但不考虑Docker守护进程启动时就已经停止的容器

      docker run --restart=unless-stopped [容器名]
    • 如果容器启动时没有设置–restart参数,则通过下面命令进行更新:

      docker update --restart=always [容器名]
  • –privileged:使用该参数等于true,container内的root拥有真正的root权限。不使用该参数,container内的root只是外部的一个普通用户权限。

  • -u:指定容器的用户。例如:以root用户启动容器

    docker run -it --privileged=true -u=root docker.io/centos /bin/sh

COMMAND参数说明:

  • /bin/sh:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/sh。

实例:创建并启动elasticsearch容器

#已拉取elasticsearch的镜像
[root@localhost ~]# docker run -it --name elasticsearch -p 9200:9200 -p 9300:9300 --net elk-net -e "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:8.5.3

启动和停止容器

停止容器的命令如下:

#docker stop <容器 ID>
[root@localhost ~]# docker stop b29ac97f0559
b29ac97f0559
#停止所有的容器docker stop $(docker ps -a -q)
[root@localhost ~]# docker stop $(docker ps -a -q)
b29ac97f0559
769689b379f6
1f45c9f9bf74
3fad059a878f
3c2ecf3387fb
ac4dc8c4c043

停止的容器可以通过 docker restart 重启:

#docker restart <容器 ID>
[root@localhost ~]# docker restart b29ac97f0559
b29ac97f0559

也可以使用 docker start 启动

[root@localhost ~]# docker start b29ac97f0559
b29ac97f0559

进入和退出容器

1、进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下exec 指令进入,下面演示了使用 docker exec 命令:

[root@localhost ~]# docker exec -it b29ac97f0559 /bin/sh
sh-5.0$

更多参数说明请使用 docker exec –help 命令查看。

2、退出容器

要退出终端,直接输入 exit:

#exit 直接停止并退出容器
[root@localhost ~]# docker exec -it b29ac97f0559 /bin/sh
sh-5.0$ exit
exit

或者使用以下按键操作

#ctrl + p + q 容器不停止退出
[root@localhost ~]# docker exec -it b29ac97f0559 /bin/sh
sh-5.0$ read escape sequence

导出和导入容器

1、导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

[root@localhost ~]# docker export b29ac97f0559 > es.tar
[root@localhost ~]# ll
total 2219608
-rw-r--r-- 1 root root 1753406976 Feb 17 13:39 es.tar

导出容器 b29ac97f0559 快照到本地文件es.tar。这样将导出容器快照到本地文件。

2、导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 es.tar 导入到镜像 es:v1:

cat es.tar | docker import - es:v1
[root@localhost ~]# cat es.tar | docker import - es:v1
sha256:ac564d4471c26e1d0b548a64e264b21e36df3313454f655da299ea233883ecf7
[root@localhost ~]# docker images
REPOSITORY                                     TAG       IMAGE ID       CREATED         SIZE
es                                             v1       ac564d4471c2   35 seconds ago   1.75GB
docker.elastic.co/elasticsearch/elasticsearch   8.5.3     7eac6adf7120   2 months ago     1.29GB

此外,也可以通过指定 URL 或者某个目录来导入,例如:

[root@localhost ~]# docker import es.tar es:v2
sha256:0a49148928661748f3990e8784245f44f6efb589d17ea64b5721e9c3dd7287b2
[root@localhost ~]# docker images
REPOSITORY                                     TAG       IMAGE ID       CREATED             SIZE
es                                             v2       0a4914892866   About a minute ago   1.75GB
es                                             v1       ac564d4471c2   4 minutes ago        1.75GB
docker.elastic.co/elasticsearch/elasticsearch   8.5.3     7eac6adf7120   2 months ago         1.29GB

查看容器

查看所有正在运行容器命令如下:

docker ps options[可选]

option参数说明:

  • -a:查看正在运行的容器 + 曾经运行过的容器

  • -f:根据条件过滤显示的内容。

  • –format:指定返回值的模板文件。

  • -l:显示最近创建的容器。

  • -n:列出最近创建的n个容器。

  • –no-trunc:不截断输出。

  • -q:只显示容器编号

  • -s:显示总的文件大小。

使用示例如下:

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                                                 COMMAND                 CREATED       STATUS               PORTS                                                                                 NAMES
b29ac97f0559   docker.elastic.co/elasticsearch/elasticsearch:8.5.3   "/bin/tini -- /usr/l…"   8 hours ago   Up 7 hours            0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                                                 COMMAND                 CREATED         STATUS                     PORTS                                                                                 NAMES
49db633c388b   es:v1                                                 "/bin/bash"              20 seconds ago   Exited (0) 15 seconds ago                                                                                         reverent_bhabha
b29ac97f0559   docker.elastic.co/elasticsearch/elasticsearch:8.5.3   "/bin/tini -- /usr/l…"   8 hours ago     Up 7 hours                  0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch

删除容器

删除容器使用 docker rm 命令:

#删除指定的容器(运行中的不能删除,强制删除 加上 -f)
docker rm + 容器ID
#递归删除按照命令查询出的记录
docker rm -f $(docker ps -a -q)
docker ps -a -q|xargs docker rm
#根据容器的状态,删除Exited状态的容器
docker rm $(docker ps -qf status=exited)
#删除所有的容器(只删除单个时把后面的变量改为container id即可)
docker rm $(docker ps -a -q)

使用示例如下:

[root@localhost ~]# docker rm 49db633c388b
Error response from daemon: You cannot remove a running container 49db633c388b8805702a6dd2ade8e4376476469fd0ab7bd27fc3bad51253caab. Stop the container before attempting removal or force remove
[root@localhost ~]# docker rm -f 49db633c388b
49db633c388b

原文始发于微信公众号(面试技术):Docker容器使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/186908.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!