容器来源于镜像。容器与镜像的关系类似于面向对象编程中的对象与类。
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