1. 安装docker
使用如下命令可以安装docker,安装成功后docker version可以查看到docker的client和server信息。
sudo apt install docker docker.io -y
为普通用户添加权限
sudo chmod 666 /var/run/docker.sock
下面的方法同样可行,将非root用户名添加到docker组
sudo gpasswd -a $USER docker # 将当前用户添加至docker用户组
systemctl restart docker
# 刷新用户组
newgrp - docker
# 查看docker版本,没有报错证明安装成功
docker version
# 运行helloworld,会提示你运行成功了
docker run helloworld
2. 修改镜像地址
国内访问docker官网的镜像非常缓慢,需要修改镜像地址。
# daemon.json默认存在则将配置加在末尾,不存在则创建后添加内容
sudo vim /etc/docker/daemon.json
添加如下内容,即将阿里云作为镜像地址。注意下面的地址一段时间会过期,读者可以用自己的账号去阿里云获取相应的链接。
{
"registry-mirrors": ["https://hh3d1zzg.mirror.aliyuncs.com"]
}
修改配置后,重新加载配置
sudo systemctl daemon-reload
重新启动docker
sudo systemctl restart docker
其它可选docker镜像地址
中国镜像 | https://registry.docker-cn.com |
---|---|
网易镜像 | https://hub-mirror.c.163.com |
百度镜像 | https://mirror.baidubce.com |
3. 查看docker信息
查看系统中有哪些容器,不加-a只查看运行中的,加了-a查看所有容器。
docker ps -a
查看宿主机内的容器个数,镜像源等信息
docker info
查看容器占用资源情况
docker stats
4. 镜像管理
docker镜像是分成多个包的,所以拉取镜像时可以并行拉取。
查看系统内有哪些镜像
docker images
拉取镜像,冒号用于指定镜像版本
docker pull tomcat:8
查看远程镜像,镜像会按星星排序,所以一般选择靠前的镜像
docker search 镜像名
5. 容器管理
指定镜像运行用容器,-d表示后台运行,-p表示指定端口映射,getting-started是镜像名称。
docker run -dp 3000:3000 getting-started
# -i 以交互模式运行容器;-t 为容器重新分配一个伪输入终端;--rm表示容器退出时就把容器删除; --name 为容器指定一个名称
docker run -i -t --name mycentos 镜像名称/镜像ID
docker run常用参数列表
参数 | 作用 |
---|---|
-i | 以交互模式运行容器 |
-t | 为容器重新分配一个伪输入终端 |
–rm | 表示容器退出时就把容器删除 |
–restart always | 开机自动启动 |
-d | 后台运行容器 |
-p | 指定主机到容器的端口映射,一个端口写一个-p |
–name | 指定容器的名称 |
修改配置后,重新加载配置
sudo systemctl daemon-reload
重新启动docker
sudo systemctl restart docker
删除容器,正在运行的容器不能被删除
docker rm -f 容器id
删除所有容器,-q表示仅显示容器id
docker rm $(docker ps -aq)
登录容器,按CTRL+D或者exit可以退出
docker exec -it 容器名称/id /bin/bash
6. 网络配置
查看docker自动创建了哪些网络
docker network ls
7. 限制docker日志
docker默认的日志增长非常快,所以需要进行限制。
sudo vim /etc/docker/daemon.json
# 将如下内容放入daemon.json中,配置后需要重新加载配置
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
max-size=500m,意味着一个容器日志大小上限是500M,max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。
修改配置后,重新加载配置
sudo systemctl daemon-reload
重新启动docker
sudo systemctl restart docker
volume
容器文件系统的本质是在镜像层上面创建的读写层,运行中的容器对任何文件的修改都存在于该读写层, 当容器被删除时,容器中的读写层也会随之消失。而有的应用,如gitlab代码托管仓库需要持久化数据,volume可以解决这一问题。volume的本质是文件或者目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。 卷的概念不仅解决了数据持久化的问题,还解决了容器间共享数据的问题。
# 创建的卷默认放在/var/lib/docker/volumes/
docker volume create 卷名称
# 列出宿主机中所有的卷,由此可见卷是宿主机上统一管理的
docker volume ls
# 删除卷,删除卷后卷里面的数据不能恢复
docker volume rm 卷名称
# 将已经创建的卷挂载到容器的指定目录下,同一个卷可以挂载到多个容器,从而实现容器间数据共享
# 不过容器本身是为了资源隔离,通过卷的方式共享数据,与资源隔离的理念有冲突
--mount source={volume-name},target={directory}
# 直接使用-v参数,匿名目录挂载,宿主机默认放在/var/lib/docker/volumes/
docker run -v 容器内目录名
# 具名目录挂载,将宿主机内的ovpn-data-first卷挂载到容器内的/etc/openvpn目录
docker run -v ovpn-data-first:/etc/openvpn
8. k8s
从docker20.10起,/var/run/dockershim.sock 文件是不再存在的。对于与 Docker 20.10 兼容的 crictl 版本,您可以使用 containerd 的 CRI 插件版本 v1.20.0。
正确运行crictl的方法。
sudo crictl --runtime-endpoint /run/containerd/containerd.sock version