Docker使用笔记
# 安装Docker
安装 Docker Engine-Community
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
启动service docker start
开机自启systemctl enable docker
删除安装包yum remove docker-ce
删除镜像容器配置文件rm -rf /var/lib/docker
# 安装Docker Compose
官方文档 (opens new window) 版本列表 (opens new window)
通过二进制文件安装
curl -L "https://github.com/docker/compose/releases/download/(版本号)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
以v2.23.3
为例
curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version
# 问题记录
- 在
Armbian
系统安装后,执行出现docker-compose version
报错/usr/local/bin
路径下找不到docker-compose
命令。
echo $PATH
发现该目录在环境变量中。
权限也给了,找不出原因,干脆删除该文件,换一种方式安装。
参照官方文档给的命令:
sudo apt-get remove docker-compose-plugin
安装后执行docker-compose version
,话说报错找不到docker-compose
命令,不过这次没有提/usr/local/bin
,猜测是没放到可执行目录下,
看看docker-compose
的安装目录:
docker info --format '{{range .ClientInfo.Plugins}}{{if eq .Name "compose"}}{{.Path}}{{end}}{{end}}'
输出/usr/libexec/docker/cli-plugins/docker-compose
给该文件创建一个软连接到可执行目录下
sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose
再次运行docker-compose
命令,成功输出版本信息。
# 安装国内镜像源
修改/etc/docker/daemon.json文件,如果没有先建一个即可
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
}
2
3
使配置生效
systemctl daemon-reload
service docker restart
docker info
2
3
# 常用命令
# Dockerfile
- FROM : 基础镜像
- MAINTAINER : 维护者信息
- COPY 复制文件到镜像,./ 指的是Dockerfile当前上下文环境
- ADD :添加文件,与COPY类似,ADD会自动解压文件
- RUN : 执行命令
- WORKDIR :cd命令 指定目录,之后的操作在该目录下进行 . 上下文
- VOLUME : 挂载目录
- EXPOSE : 端口
- ENTRYPOINT : 容器启动时执行命令
- CMD 容器启动时执行命令,可以被docker run命令后的参数替换。如果同时存在ENTRYPOINT和CMD,CMD会被当作ENTRYPOINT的参数。
Dockerfile写好后可以用 docker build config 进行检查,如果有问题会进行提示
FROM node
WORKDIR .
COPY source .
CMD cd panel \
&& npm config set registry https://registry.npm.taobao.org \
&& npm install \
&& node server.js
2
3
4
5
6
7
# Dockerfile创建镜像并上传到docker hub
在终端输入
docker login
登录docker info | grep 'Username'
命令查看是否登录成功在编写好
Dockerfile
的文件目录下,执行docker build -t [用户名]/[镜像名]:[版本号] .
命令,创建镜像。版本号不写默认为不写标签默认为latest
# 容器
# 创建
docker run [镜像id或ta] --name[容器tag] -p [id]:[post]:[post]
- 挂载本地目录
-v [本地目录地址]:[容器目录地址]
命令要写在镜像前面,否则无效
# 列举
查看运行中的docker ps
查看所有容器docker ps -a
# 停止
docker stop [容器id、name]
停止所有容器 docker stop $(docker ps -aq)
批量停止运行中的容器docker ps -a | awk '{print $1}'|xargs docker stop
# 删除
docker rm [容器id或tag]
- 删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
docker rm $(docker ps -a -q)
- 根据容器的状态,删除Exited状态的容器
docker rm $(docker ps -qf status=exited)
- Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。
docker container prune
# 更新容器配置
例如设置自动启动 docekr update --restart=always [容器id或name]
# 进入容器
docker exec -it [容器名] /bin/bash
- -i: 交互式操作。
- -t: 终端。
# 监控
docker stats [容器名]
# 容器详情
docker inspect [容器名]
# 镜像
# 列举
docker images
# 删除
docker rmi [镜像id或tag]
docker rmi $(docker images | grep "none" | awk '{print $3}')
# 网卡
创建网卡 docker network create [网卡名]
查看网卡 docker network ls
查看网桥下的容器docker network inspect [网桥名]
# 数据卷
创建数据卷docker volume create [名称]
列举数据卷docker volume ls
查看数据卷信息docker volume inspect [名称]
# Docker Compose
docker-compose.yml
文件中可以编排多个容器
docker-compose -f [docker-compose文件名] [操作] [容器名]
文件名不写默认是docker-compose.yml
操作:pull build create start stop restart rm up down
# 其他
# 监控镜像更新
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup
2
3
4
5
6
# maven daoker插件生成镜像
mvn package docker:build -DskipTests
# 磁盘清理
docker system df
查看磁盘使用情况可通过执行
docker system prune
命令可用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及无tag的镜像
。docker system prune -a
命令清理更干净、彻底,可以将没有容器使用的Docker镜像都删掉
# 集群
查看集群节点 docker node ls