Docker常用知识

Docke常用知识点

Docker包括三个基本概念:

仓库(Repository)

镜像(Image)

容器(Container)

(1)安装

参照这篇文章:

https://blog.youkuaiyun.com/ITWUYI/article/details/109218409

(2)知识图谱

图谱

(3)常用的命令

1、如何使用docker

常用的docker使用:
docker pull、docker run、docker ps -a -l、 docker images、docker logs -f、 docker stop、docker start、docker restart、docker exec、docker attach、docker export、docker import、docker rm、docker container prune、docker port、docker inspect、docker search、docker rmi、docker commit、docker build、docker tag、docker login、docker logout、docker push username/ubuntu:18.04、docker kill -s(发送信号) KILL myngix、docker pause、 docker unpause、docker create、docker events、docker cp、docker diff、docker history、docker save、docker load、docker info、docker version。

2、docker run启动命令

(1)启动rabbitmq

docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management

4369,25672 erlang发现&集群端口
5672,5671 AMQP端口
15672 web管理后台端口
61613,61314 STOMP协议端口
1883,8883 MQTT协议端口

-d 后台运行容器,并返回容器ID
–name 为容器指定一个名称
-p 指定端口映射,格式为:主机(宿主)端口:容器端口
-v vloume 绑定一个卷
-e username=“root” 设置环境变量
-h 指定容器的hostname
-i 以交互模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输入终端,通常与-i同时使用

全面的写法:

docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v pwd/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin df80af9ca0c9

(2)启动mysql

docker run -d --name mymysql -p 3306:3306 -v /root/logs:/logs -v /root/conf:/etc/mysql/conf.d -v /root/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.30

(3)启动nginx

使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run -d --name mynginx nginx:latest

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -d -P nginx:latest

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -d -p 80:80 -v /data:/data nginx:latest

绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
docker run -p 127.0.0.1:80:8080/tcp nginx:latest

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it nginx:latest /bin/bash

(4)启动mongo

docker run -itd --name mongo -p 27017:27017 mongo --auth
docker exec -it mongo mongo admin
db.createUser({ user:‘admin’,pwd:‘123456’,roles:[ { role:‘userAdminAnyDatabase’, db: ‘admin’}]});
db.auth(‘admin’, ‘123456’)

3、docker attach与docker exec

在使用-d参数时,容器进入了后台,此时想要进入容器,可以通过attach、exec进入。

docker attach 1e560fca3906
注意: exit 如果从这个容器退出,会导致容器的停止。

docker exec -it 243c32535da7 /bin/bash
注意: 如果从这个容器退出,不会导致容器的停止,这就是为什么推荐大家使用 docker exec 的原因。

容器mynginx将访问日志指到标准输出,连接到容器查看访问信息。

docker attach --sig-proxy=false mynginx

4、导出容器

docker export 1e560fca3906 > ubuntu.tar

导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。这样将导出容器快照到本地文件。

5、导入容器快照

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

也可以通过指定 URL 或者某个目录来导入
docker import http://example.com/exampleimage.tgz example/imagerepo

6、删除容器

docker rm -f 1e560fca3906

7、清理掉所有处于终止状态的容器

docker container prune

8、查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号

我们创建的 web 应用容器 ID 为 bf08b7f2cd89 名字为 wizardly_chandrasekhar
docker port bf08b7f2cd89 或 docker port wizardly_chandrasekhar 来查看容器端口的映射情况,显示为5000/tcp -> 0.0.0.0:5000。

9、docker logs [ID或者名字] 可以查看容器内部的标准输出

docker logs -f bf08b7f2cd89

-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

10、查看WEB应用程序容器的进程

docker top wizardly_chandrasekhar

11、查看 Docker 的底层信息

docker inspect wizardly_chandrasekhar,它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

12、docker ps -l

查询最后一次创建的容器

13、本地主机镜像查询

docker images

REPOSITORY:表示镜像的仓库源;TAG:镜像的标签;IMAGE ID:镜像ID;CREATED:镜像创建时间;SIZE:镜像大小。

14、预先下载这个镜像

docker pull

-a :拉取所有 tagged 镜像

–disable-content-trust :忽略镜像的校验,默认开启

15、删除镜像

docker rmi hello-world

-f :强制删除

–no-prune :不移除该镜像的过程镜像,默认移除

16、创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
(1)从已经创建的容器中更新镜像,并且提交这个镜像。

(2)使用 Dockerfile 指令来创建一个新的镜像

更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器

docker run -t -i ubuntu:15.10 /bin/bash

root@e218edb10161:/#

在运行的容器内使用 apt-get update 命令进行更新。在完成操作之后,输入 exit 命令来退出这个容器。

此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

docker commit -m=“has update” -a=“itwuyi” e218edb10161 runoob/ubuntu:v2

-m: 提交的描述信息;-a: 指定镜像作者;e218edb10161:容器 ID;itwuyi/ubuntu:v2: 指定要创建的目标镜像名。

-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。

17、构建镜像

docker build,从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像

FROM centos6.7
MAINTAINER Fisher “fisher@sudops.com”
RUN /bin/echo ‘root:123456’ | chpasswd
RUN useradd itwuyi
RUN /bin/echo ‘itwuyi:123456’ | chpasswd
RUN /bin/echo -e "LANG=“en_US.UTF-8"”>/etc/default/local

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么

构建
docker build -t runoob/centos:6.7 .
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

18、设置镜像标签

docker tag 860c279d2fec itwuyi/centos:dev docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。

19、Docker 容器互联

新建网络

docker network create -d bridge test-net

查看 docker network ls

-d:参数指定 Docker 网络类型,有 bridge、overlay。
其中 overlay 网络类型用于 Swarm mode。
连接容器
运行一个容器并连接到新建的 test-net 网络:
docker run -itd --name test1 --network test-net mysql:5.7.30 /bin/bash
打开新的终端,再运行一个容器并加入到 test-net 网络:
docker run -itd --name test2 --network test-net mysql:5.7.30 /bin/bash
通过 ping 来证明 test1 容器和 test2 容器建立了互联关系,如果 test1、test2 容器内中无 ping 命令,则在容器内执行以下命令安装 ping。
apt-get update
apt install iputils-ping

配置DNS
我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
“dns”:[
“114.114.114.114”,
“8.8.8.8”
]
}
配置完,需要重启 docker 才能生效。
查看容器的DNS是否生效:
docker run -it --rm ubuntu cat etc/resolv.conf
手动指定容器的配置
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com.ubuntu
-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
–dns=IP_ADDRESS: 添加 DNS服务器到容器的/etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
–dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
如果在容器启动时没有指定 --dns 和 --dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS。

20、docker官方仓库更换

编辑文件/etc/docker/daemon.json

{
“registry-mirrors”: [“http://f1361db2.m.daocloud.io”, “http://hub-mirror.c.163.com”, “https://registry.docker-cn.com”]
}

21、docker rm

强制删除容器 db01、db02:docker rm -f db01 db02
移除容器 nginx01 对容器 db01 的连接,连接名 db:docker rm -l db01
删除容器 nginx01, 并删除容器挂载的数据卷:docker rm -v nginx01
删除所有已经停止的容器:docker rm $(docker ps -a -q)

22、docker ps

-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
–format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
–no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。

23、docker inspect

获取容器/镜像的元数据。
-f :指定返回值的模板文件。
-s :显示总的文件大小。
–type :为指定类型返回JSON。
获取正在运行的容器mymysql的 IP
docker inspect --format=’{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ mymysql

24、docker events

-f :根据条件过滤事件;
–since :从指定的时间戳后显示所有事件;
–until :流水时间显示到指定的时间为止;
显示docker 2016年7月1日后的所有事件。
docker events --since=“1467302400”
显示docker镜像为mysql:5.6 2016年7月1日后的相关事件。
docker events -f “image”=“mysql:5.6” --since=“1467302400”
如果指定的时间是到秒级的,需要将时间转成时间戳。如果时间为日期的话,可以直接使用,如–since=“2016-07-01”。

25、docker logs

-f : 跟踪日志输出
–since :显示某个开始时间的所有日志
-t : 显示时间戳
–tail :仅列出最新N条容器日志
查看容器mynginx从2016年7月1日后的最新10条日志。
docker logs --since=“2016-07-01” --tail=10 mynginx

26、docker wait

阻塞运行直到容器停止,然后打印出它的退出代码。

27、docker export

将文件系统作为一个tar归档文件导出到STDOUT。 -o :将输入内容写到文件。
将id为a404c6c174a2的容器按日期保存为tar文件。
docker export -o mysql-‘date +%Y%m%d’.tar a404c6c174a2

28、docker cp

-L :保持源目标中的链接
将主机/www/itwuyi目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/itwuyi 96f7f14e99ab:/www/
将主机/www/itwuyi目录拷贝到容器96f7f14e99ab中,目录重命名为www。
docker cp /www/itwuyi 96f7f14e99ab:/www
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp 96f7f14e99ab:/www /tmp/

29、docker diff

检查容器里文件结构的更改。

30、docker push

–disable-content-trust :忽略镜像的校验,默认开启

31、docker search

–automated:只列出automated build类型的镜像。
–no-trunc:显示完整的镜像描述。
-s:列出收藏数不小于指定值的镜像。

32、docker images

-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
–digests :显示镜像的摘要信息;
-f :显示满足条件的镜像;
–format :指定返回值的模板文件;
–no-trunc :显示完整的镜像信息;
-q :只显示镜像ID。

33、docker build

用于使用 Dockerfile 创建镜像

–build-arg=[] :设置镜像创建时的变量;

–cpu-shares :设置 cpu 使用权重;

–cpu-period :限制 CPU CFS周期;

–cpu-quota :限制 CPU CFS配额;

–cpuset-cpus :指定使用的CPU id;

–cpuset-mems :指定使用的内存 id;

–disable-content-trust :忽略校验,默认开启;

-f :指定要使用的Dockerfile路径;

–force-rm :设置镜像过程中删除中间容器;

–isolation :使用容器隔离技术;

–label=[] :设置镜像使用的元数据;

-m :设置内存最大值;

–memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

–no-cache :创建镜像的过程不使用缓存;

–pull :尝试去更新镜像的新版本;

–quiet, -q :安静模式,成功后只输出镜像 ID;

–rm :设置镜像成功后删除中间容器;

–shm-size :设置/dev/shm的大小,默认值是64M;

–ulimit :Ulimit配置。

–tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

–network: 默认 default。在构建期间设置RUN指令的网络模式
使用当前目录的 Dockerfile 创建镜像,标签为 itwuyi/ubuntu:v1。

docker build -t itwuyi/ubuntu:v1 .
使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。

docker build github.com/creack/docker-firefox
也可以通过 -f Dockerfile 文件的位置:

$ docker build -f /path/to/a/Dockerfile .
在 Docker 守护进程执行 Dockerfile 中的指令前,首先会对 Dockerfile 进行语法检查,有语法错误时会返回:

$ docker build -t test/myapp .
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD

34、docker history

-H :以可读的格式打印镜像大小和日期,默认为true;
–no-trunc :显示完整的提交记录;
-q :仅列出提交记录ID。

35、docker save

将指定镜像保存成 tar 归档文件。

-o :输出到的文件

36、docker load

–input , -i : 指定导入的文件,代替 STDIN。
–quiet , -q : 精简输出信息。
docker load < busybox.tar.gz
docker load --input fedora.tar

37、docker import

从归档文件中创建镜像。
-c :应用docker 指令创建镜像。
-m :提交时的说明文字。

docker容器互联需要进一步了解
docker Compose需要进一步了解(定义和运行多容器)
docker Machine需要进一步了解(管理主机)
Swarm 集群管理

后续会继续补充相关知识点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值