Docker使用笔记

# 安装Docker

官方安装、卸载文档 (opens new window)

参考菜鸟教程 (opens new window)

安装 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-composev2.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
1

chmod +x /usr/local/bin/docker-compose

docker-compose version

# 问题记录

  1. Armbian系统安装后,执行出现docker-compose version报错/usr/local/bin路径下找不到docker-compose命令。

echo $PATH发现该目录在环境变量中。

权限也给了,找不出原因,干脆删除该文件,换一种方式安装。

参照官方文档给的命令:

sudo apt-get remove docker-compose-plugin
1

安装后执行docker-compose version,话说报错找不到docker-compose命令,不过这次没有提/usr/local/bin,猜测是没放到可执行目录下,

看看docker-compose的安装目录:

docker info --format '{{range .ClientInfo.Plugins}}{{if eq .Name "compose"}}{{.Path}}{{end}}{{end}}'
1

输出/usr/libexec/docker/cli-plugins/docker-compose

给该文件创建一个软连接到可执行目录下

sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose
1

再次运行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"]
}
1
2
3

使配置生效

systemctl daemon-reload
service docker restart
docker info
1
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
1
2
3
4
5
6
7

# Dockerfile创建镜像并上传到docker hub

  1. 在终端输入docker login登录

  2. docker info | grep 'Username'命令查看是否登录成功

  3. 在编写好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}')
1

# 网卡

创建网卡 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
1
2
3
4
5
6

# maven daoker插件生成镜像

mvn package docker:build -DskipTests

# 磁盘清理

  1. docker system df 查看磁盘使用情况

  2. 可通过执行docker system prune 命令可用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及无tag的镜像

docker system prune -a命令清理更干净、彻底,可以将没有容器使用的Docker镜像都删掉

# 集群

查看集群节点 docker node ls

上次更新: 2024/03/04, 13:28:13
最近更新
01
go-admin-ui项目仿写练手1-登录页
06-29
02
maven依赖问题
06-17
03
JVM相关命令
02-21
更多文章>