Docker学习笔记

Docker安装

推荐文章:Docker 容器入门 - 惨绿少年 - 博客园 (cnblogs.com)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-date lvm2



#设置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo



#安装docker
yum install -y docker-ce

#查看docker版本,验证是否安装成功
docker -v

Docker镜像加速

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{

"registry-mirrors": ["https://dwpobk77.mirror.aliyuncs.com"]
}
EOF



sudo systemctl daemon-reload
sudo systemctl restart docker

Docker生命周期

1665960979

Docker命令

镜像相关

搜索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# docker search 镜像名称


[root@docker ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16597 [OK]
bitnami/nginx Bitnami nginx Docker Image 121 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 39
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 17 [OK]
rancher/nginx-ingress-controller 10
ibmcom/nginx-ingress-controller Docker Image for IBM Cloud Private-CE (Commu… 4
bitnami/nginx-ldap-auth-daemon 3
bitnami/nginx-exporter 2
circleci/nginx This image is for internal use 2

下载/拉取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker pull 名称:版本


[root@docker ~]# docker pull nginx:1.21.6
1.21.6: Pulling from library/nginx
c229119241af: Pull complete
2215908dc0a2: Pull complete
08c3cb2073f1: Pull complete
18f38162c0ce: Pull complete
10e2168f148a: Pull complete
c4ffe9532b5f: Pull complete
Digest: sha256:2275af0f20d71b293916f1958f8497f987b8d8fd8113df54635f2a5915002bf1
Status: Downloaded newer image for nginx:1.21.6
docker.io/library/nginx:1.21.6

镜像列表

1
2
3
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.21.6 12766a6745ee 10 days ago 142MB

镜像标签

1
2
3
4
5
6
7
# docker tag [imagesID] 改后名称:改后tag


[root@docker ~]# docker tag nginx:1.21.6 mynginx:1.21.6
[root@docker ~]# docker images |grep nginx
mynginx 1.21.6 12766a6745ee 10 days ago 142MB
nginx 1.21.6 12766a6745ee 10 days ago 142MB

镜像删除

1
2
[root@docker ~]# docker rmi mynginx:1.21.6
Untagged: mynginx:1.21.6

镜像导出

1
2
3
4
5
# docker save 镜像id/镜像名 > 名字.tar

[root@docker ~]# docker save nginx:1.21.6 > nginx-v1.21.6.tar
[root@docker ~]# ls
nginx-v1.21.6.tar

镜像导入

1
docker load < nginx-v1.21.6.tar

容器相关

创建容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Docker run [options] image [command] [arg]

Option说明:
-d 后台运行
-i 以交互模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输出终端,通常与-i同时使用
--name 设置容器名字
--net 指定网络连接类型
--h 设置主机名称
--dns 指定容器的dns服务器,默认和宿主一致
-e 设置环境变量(**=”**”)
-p 本地端口:容器端口 把容器的某个端口暴露到主机的某个端口
-v 本地目录:容器目录 把主机的某目录挂载到容器的目录里面实现文件系统的链接
--network 指定网络
--rm 容器关闭后自动删除



--restart=always #自动启动
#启动策略:
no,默认策略,在容器退出时不重启容器.

on-failure ,在容器非正常退出时(退出状态非0),才会重启容器

on-failure:3,在容器非正常退出时重启容器,最多重启3次

always ,在容器退出时总是重启容器.

unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。

如果创建时未指定--restart=always ,可通过update命令设置

语法: docker update --restart=always 容器id或名字

容器列表

使用命令:”docker ps”来查看已经启动的容器,如果有停止运行的容器可以添加’-a’参数来查看

1
2
3
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cf61416ee67 nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx1

关闭容器

启动容器

1
docker start 容器ID|容器名称

重启容器

1
2
docker restart 容器ID|容器名称

容器删除

使用命令:”docker rm {容器ID|容器名称}”来删除已经关闭的容器,如果容器在运行中想要强制删除可以加’-f’参数进行强制删除

1
docker rm 容器ID|容器名称

容器日志

1
docker logs 容器ID|容器名称

容器转镜像

1
2
3
4
5
6
7
8
# 如果容器在运行中可以使用-p参数
[root@docker ~]# docker commit -p myweb myweb:v1.0
sha256:05f5efa5b56fd3d9c6d17b74ee4a3e9866095ac8cc681879dda21b9b7a968859
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myweb v1.0 05f5efa5b56f 4 seconds ago 142MB
nginx latest fa5269854a5e 11 days ago 142MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB

容器信息

1
docker inspect {容器ID|容器名称}

DockerFile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FROM 指定基础镜像

MAINTAINER 指定维护者

RUN 在命令前面加上RUN即可

ADD 添加宿主机的文件到容器内,多了个自动解压的功能

COPY 也是添加宿主机的文件到容器内,仅仅拷贝

WORKDIR 设置当前工作目录

VOLUME 设置卷,挂载主机目录

EXPOSE 指定对外的端口

CMD 指定容器启动后要干的事情

Docker网络

Docker网络是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络无法直接访问到容器,从而实现网络的隔离。

网络模式

Host

Docker_network_host
启动容器时使用host模式,那这个容器将不会获得一个独立的ip,而是和宿主机共用一个ip,容器将不会虚拟出自己的网卡,而是使用宿主机的ip和端口,但是容器其他方面,比如文件系统,进程系统都是独立。

Container

Docker_network_container
启动容器时使用Container使用的时候需要指定一个容器id或者容器名称,这个模式会和指定的容器共享同一个ip,和host一样除了ip是共享对应容器的ip之外,容器的其他方面,比如文件系统,进程系统都是独立的。

None

Docker_network_none
启动容器时使用None,Docker容器将不会生成网卡,也就是说容器会没有网卡,ip,路由等信息。需要我们自己来添加。这种网络情况只会又一个lo回环网卡。

bridge

Docker_network_bridge
当docker服务启动的时候,会在主机上创建一个docker0的虚拟网卡,此主机默认启动的容器都会链接到这个虚拟网卡上。类似与vmwar 的一个虚拟网络。