install

 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
35
36
37
38
39
40
41
42
43
44
# 首先需要安装docker程序,然后开启守护进程
zypper in docker # install docker
systemctl status docker.service
systemctl start docker.service # 开启守护进程
docker info # 查看docker状态信息
docker run hello-world #可以用来验证是否成功安装

# 安装完docker之后,最好给他换一个目录,否则将来文件可能很多很大
# 最好改一下下面的bip,让默认网桥网段不一样,以后好辨识
# vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://h8viyefd.mirror.aliyuncs.com"],
  "graph":"/home/dockerRoot",
  "insecure-registries":["10.10.200.11:5000"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-level": "warn",
  "log-driver": "json-file",
  "bip": "172.17.194.1/24",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  }
}
# 全局日志设置可以有下面几种,默认是 json-file
# local
# json-file
# journald

cp -R /var/lib/docker/* /home/dockerRoot/				# copy文件
# 备注如下
"registry-mirrors": ["https://h8viyefd.mirror.aliyuncs.com"], # 更换仓库镜像
"graph":"/home/dockerRoot", 								# 换根目录
"insecure-registries":["10.10.200.11:5000"],				# 访问仓库不需要https

# centos中  "log-driver": "json-file", 可能冲突报错
# vi /etc/sysconfig/docker 中将下面这行 中 --log-driver=journald 删除
#OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
OPTIONS='--signature-verification=false'

# centos 8.1安装docker有点麻烦
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
yum erase podman buildah 		# 可能会报错,先擦除竞品
yum -y install containerd.io  	# 安装这个依赖
yum -y install docker-ce		# 安装社区版

镜像命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
docker pull centos:8					# 从仓库拉取镜像,指定tag,默认是:latest
docker images 							# 查看本地镜像
docker search centos					# 查找镜像
docker rmi hello-world					# 删除镜像
docker tag [image-id] chende/centos:dev	# 为镜像添加一个新的标签

# 创建镜像
# 1、从已经创建的容器中更新镜像,并且提交这个镜像
docker commit -m="has update" -a="chende" [c-id|names] chende/centos:8.1
# 2、使用 Dockerfile 指令来创建一个新的镜像
docker build # 修改 Dockerfile
docker build -t chende/centos:6.7 .

# 将已有的镜像打包,下载,分发到不同的服务器。
docker save -o xxx.tar dockerfile:ver
# 导入
docker load --input xxx.tar
docker load < xxx.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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
docker ps (-all|-a) 					# 查看所有容器
docker ps -l 							# 查询最后一次创建的容器

docker inspect [c-id|names]				# 查询容器底层信息
docker port [c-id|names]				# 查看容器的端口映射情况
docker top [c-id|names]					# 查看容器内部运行进程信息
docker logs [-f] [c-id|names]			# 查看容器内的标准输出,-f(tail -f)
docker stop [c-id|names]				# 停止容器
docker start [c-id|names]				# 启动容器
docker restart [c-id|names]				# 重启容器
docker stats 							# 查看 docker 中所有容器的状态
docker rm -f [c-id|names]				# 强制删除容器(运行中的就强停)
docker container prune					# 清理掉所有处于终止状态的容器
docker pause db01						# 暂停容器所有进程
docker unpause db01						# 恢复容器所有进程

docker ps -a -q                         # 查看所有容器ID
docker stop $(docker ps -a -q)          # stop停止所有容器
docker rm $(docker ps -a -q)            # remove删除所有容器

docker run -it centos /bin/bash			# 启动容器,并以命令行模式运行
# 用exec进入用-d参数在后台运行的容器,这样shell退出时容器不会退出。Win用sh,Linux用bash
docker exec -it [c-id|names] /bin/[sh|bash]

docker export [c-id|names] > xxx.tar 				# 导出容器快照到本地文件
cat docker/xxx.tar | docker import - test/xxx:v1	# 导入快照到镜像
docker import http://example.com/exampleimage.tgz example/imagerepo # 指定URL来导入镜像

# 运行一个容器(-t 指定终端 -i 交互模式 -d 后台运行模式启动容器)
docker run -itd --name redis-test -p 35201:6379 redis # 映射主机 35201 到容器的 6379 端口
docker run -itd -p 10.10.10.11:35201:6379/udp redis # 可以指定宿主机IP,可以UDP协议
docker run -d -P training/webapp python app.py # -P(将容器内部网络端口随机映射到主机) 
# 更多参数含义
--privileged=true       # 特权方式启动容器
--restart=always		# 自动重启
--ip=10.10.200.xxx      # 指定容器内部IP地址
-h hostname				# 指定主机名
-v /home/a:/home/b      # 将宿主机中a目录映射到容器中b目录
-m 8G --memory-swap 8G  # 容器限制内存大小
--cpus 4                # 限制能利用的CPU核心数

--restart= # 具体参数值详细信息:
no        # 容器退出时,不重启容器
on-failure    # 只有在非0状态退出时才重新启动容器
always      # 无论退出状态是如何,都重启容器

# 用下面的命令更新容器的配置
# docker update --restart=always 容器ID(或者容器名)
# docker container update --restart=always 容器ID(或者容器名)

# 一个综合创建docker的例子,可以指定一段端口映射
docker run -itd --name=SST -h=SST -v /data/SST:/home/store \
--restart=no --privileged --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
--cpus=4 -m=8G --memory-swap=8G \
-p 0.0.0.0:6630-6691:6630-6691 -p 0.0.0.0:10888:10888  \
x.x.x.x:5000/suse423.nodejs.12.22 /sbin/init

阿里云私有仓库

本地Docker可以将阿里云上的私有仓库地址配置成自己的默认仓库源:

1
2
3
4
5
6
7
8
# vi /etc/docker/daemon.json
"registry-mirrors": ["https://h8viyefd.mirror.aliyuncs.com"], # 更换仓库镜像

docker login --username=xxx@xx.xx registry.cn-hangzhou.aliyuncs.com
docker pull registry.cn-hangzhou.aliyuncs.com/chende/faster:[镜像版本号]
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/chende/faster:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/chende/faster:[镜像版本号]
docker logout registry.cn-hangzhou.aliyuncs.com # 记得退出

(完)