安装配置
-
安装依赖项
-
yum install -y yum-utils device-mapper-persistent-data lvm2
-
-
更换镜像源
-
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
-
安装docker-ce
-
yum install docker-ce docker-ce-cli containerd.io
-
-
设置开机启动并启动docker
-
systemctl enable docker && systemctl start docker
-
-
安装指定版本docker-compose
-
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
-
-
命令授权
-
chmod +x /usr/local/bin/docker-compose
-
-
命令软链接
-
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
-
Dockerfile编写
命令 | 说明 | 示例 |
---|---|---|
from | 定制的镜像都是基于 FROM 的镜像。 | |
env | 定义了环境变量,在后续的指令中,就可以使用这个环境变量。 | ENV TZ=Asia/Shanghai |
arg | 构建参数,与 ENV 作用一致。不过作用域不一样。只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。 | |
run | 用于执行后面跟着的命令行命令。有两种格式1. shell格式:RUN <命令行命令>2. exec格式:RUN ["可执行文件","参数1","参数2"]每执行一次RUN命令,就会加一层镜像,最终的镜像会越来越大,可以用&&将多个命令连接起来,这样就只会有一层镜像了。 | RUN ["./test.php", "dev", "offline"]RUN ["./test.php", "dev", "offline"]RUN ./test.php dev offline |
copy | 从上下文目录中复制文件或者目录到容器中的指定路径下面 | COPY ./edge-management/build/libs/* /app/ |
add | 功能和COPY类似,官方推荐使用COPY | |
cmd | 1. CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。 2. 类似于RUN,但是CMD和RUN 运行的时间点不同,CMD是在docker run 的时候运行,RUN是在Docker build的时候运行 3. 如果 Dockerfile 中如果存在多个 CMD 指令,那么仅最后一个生效。 | |
entrypoint | 类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。 | ENTRYPOINT exec java $JAVA_OPTS -jar /app/* |
volume | 定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。在启动容器 docker run 的时候,也可以通过 -v 参数修改挂载点。 避免重要的数据,因容器重启而丢失,也可以避免容器不断变大。 | |
expose | 仅仅只是声明端口 1. 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。 2. 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口 | |
workdir | 指定工作目录,用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。 |
常用命令
-
获取所有容器的IP列表
-
docker inspect --format='{{.Name}}:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
-
-
获取容器的日志位置
-
docker inspect --format='{{.LogPath}}' name
-
-
查看容器的启动策略
-
docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' name
-
-
容器内部安装vim
-
apt-get update && apt-get install vim
-
-
获取所有容器的版本
-
docker ps | awk {'print $2'}
-
-
查看指定时间段的日志
-
docker logs --since '2021-01-11T17:13:05.999999999' --until='2021-01-11T17:15:05.999999999' name
-
-
滚动查看最后100行日志
-
docker logs -f --tail 100 name
-
-
其它
-
docker pause/unpause :暂停/恢复容器中所有的进程。
-
docker top : 查看容器中运行的进程信息,支持 ps 命令参数。
-
docker --net=host 宿主机网络共享
-
常见问题
-
docker报错磁盘空间不够了,是由于镜像分层越来越多,磁盘空间不够用,就需要做一个软链到外部。以后空间增长也是在磁盘外部。ln -s var/lib/docker opt/docker
-
docker login 报错Error saving credentials:,是由于存储凭证错误;解决就是安装 apt install gnupg2 pass
-
容器停止了,但是某些文件并没有挂载出来,可以去docker的存储目录中找到这个文件,一般在diff下
参数
参数 | 说明 |
---|---|
-g / --graph="/var/lib/docker" | 设置Docker运行时根目录 |
--ip="0.0.0.0" | 设置容器绑定IP时使用的默认IP地址 |
--rm | 当容器退出时自动移除这个容器 |
-e, --env list | 设置环境变量 |
-v, --volume list | 绑定安装卷 |
--mount mount | 将文件系统挂载附加到容器 |
配置文件
-
Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致
-
在 ubuntu 中的位置是:/etc/default/docker
-
在 centos6 中的位置是:/etc/sysconfig/docker
-
在 centos7 中的位置是:/etc/docker/
-
-
在/var/lib/docker中得文件夹
-
container 运行得容器
-
overlay2 镜像存储位置
-
volumes docker自己创建得文件
-
清理空间
- 删除所有关闭的容器:
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
- 删除dangling 镜像(无tag 镜像):
docker rmi (docker images | grep "" | awk {'print 3'})
- 删除dangling 数据卷(无用volume):
docker volume rm $(docker volume ls -qf dangling=true)
- 删除所有停止的容器:
docker contailer/image/volume prune
容器迁移
save / load
- docker save -o images.tar mysql:8.6
- docker load -i images.tar
export / import
- docker export -o mysql.tar mysql:8.6
- docker import mysql.tar mysql:8.6
- 区别
-
-
save保存的是镜像,export保存的是容器
-
load载入镜像包,import载入容器包,但两者都会恢复为镜像
-
load不能对载入的镜像重命名,import可以为镜像指定新名称
-
管理工具
portainer
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer
file-browser
docker run -d --name filebrowser -p 9991:80 --restart=always -v /data/file-borwser:/srv filebrowser/filebrowser
minio
docker run -d --name minio-server -p 9110:9000 -p 9111:9111 --restart=always -v /home/admina/minio/data:/data minio/minio:RELEASE.2022-04-08T19-44-35Z server /data --console-address ":9111"