Ubuntu中Docker及Docker Compose常见命令
一、Docker
1.传统安装方式
#安装前先卸载操作系统默认安装的docker,
sudo apt-get remove docker docker-engine docker.io containerd runc
#安装必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
#添加 Docker 官方 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#添加 apt 源:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新源
sudo apt update
sudo apt-get update
#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
#等待安装完成
#查看Docker版本
sudo docker version
#查看Docker运行状态
sudo systemctl status
#命令补全
sudo apt-get install bash-completion
sudo curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
source /etc/bash_completion.d/docker.sh
#加入docker的用户组(可以不需要sudo运行docker命令)
sudo groupadd docker
sudo usermod -aG docker${USER}
#重启服务
sudo systemctl restart docker
#切换到新的组而不必重新登录,这样你就可以立即拥有对 docker 组的权限
newgrp docker
2.脚本安装方式
可能因为镜像源问题导致安装不了,在网上找了一些大佬推荐的方案
脚本下载链接点击跳转提取码:6363
#把脚本文件放在服务器中,移动到脚本存放路径下执行脚本
bash install_docker.sh --mirror Aliyun
#加入docker的用户组(可以不需要sudo运行docker命令)
sudo groupadd docker
sudo usermod -aG docker${USER}
#重启服务
sudo systemctl restart docker
#切换到新的组而不必重新登录,这样你就可以立即拥有对 docker 组的权限
newgrp docker
二、修改国内的镜像源,把全部都写上
sudo mkdir -p /etc/docker
cd /etc/docker
sudo vim daemon.json
#进入编辑,输入以下内容
{
"registry-mirrors": [
"https://vm1wbfhf.mirror.aliyuncs.com",
"http://f1361db2.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.baidubce.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://registry.cn-hangzhou.aliyuncs.com",
"https://ccr.ccs.tencentyun.com",
"https://hub.daocloud.io",
"https://docker.shootchat.top",
"https://do.nark.eu.org",
"https://dockerproxy.com",
"https://docker.m.daocloud.io",
"https://dockerhub.timeweb.cloud",
"https://docker.shootchat.top",
"https://do.nark.eu.org"
]
}
#重启服务
systemctl daemon-reload
systemctl restart docker
三、Docker相关命令
# 启动docker
systemctl start docker
# 关闭docker
systemctl stop docker
# 重启docker
systemctl restart docker
# docker设置随服务启动而自启动
systemctl enable docker
# 查看docker 运行状态
systemctl status docker
# 查看docker 版本号信息
docker version
docker info
# 忘记某些命令时,进行查看与回顾
docker --help
#如果忘记了 run命令 不知道可以带哪些参数 可以这样使用
docker run --help
四、Docker镜像相关命令
注意:刚好国内镜像源都关闭了,目前解决镜像拉取问题有:加速器,本地tar镜像,docker私服,或者科学上网,寻找可用的国内镜像源网站。我们选择的是寻找可用的国内镜像源网站所以把全部国内的镜像源都写上去了。
#拉取镜像
docker pull 镜像名
docker pull 镜像名:tag
# 查看镜像列表
docker images
# 搜索镜像
docker search 镜像名
docker search --filter=STARS=9000 mysql 搜索 STARS >9000的 mysql 镜像
docker rmi -f 镜像名/镜像ID
# 删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
# 删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
# 强制删除镜像
docker image rm 镜像名称/镜像ID
# 保存镜像
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
# 示例
docker save mysql -o /test.tar
# 加载镜像
docker load -i 镜像保存文件位置
# 示例
docker load -i test.tar
五、容器命令
1.容器操作命令
#查看容器信息
docker inspect 容器ID/容器名
# 查看所有容器列表(包含 正在运行 和 已停止的)
docker ps -a
# 停止容器
docker stop 容器ID/容器名
# 重启容器
docker restart 容器ID/容器名
# 启动容器
docker start 容器ID/容器名
# kill 容器
docker kill 容器ID/容器名
# 容器文件拷贝 (无论容器是否开启 都可以进行拷贝)
# docker cp 容器ID/名称:文件路径 要拷贝到外部的路径 | 要拷贝到外部的路径 容器ID/名称:文件路径
# 从容器内 拷出
docker cp 容器ID/名称: 容器内路径 容器外路径
# 示例:
docker cp nginx:/etc/nginx/conf.d /data/applications/nginx/conf/conf.d
# 从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径
#查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID
# 示例:
docker logs -f -t --tail 1000 2ab447816a66
#更换容器名
docker rename 容器ID/容器名 新容器名
2..运行容器命令
docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash
举例子:
docker run --name mysql \
-v /myapp/mysql:/var/lib/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.19
命令参数说明:
-d:后台运行容器
-p:端口映射,格式为主机端口:容器端口
-e:设置环境变量,这里设置的是root密码
--name:设置容器别名
-v 挂载文件,格式为:宿主机绝对路径目录:容器内目录,
比如我们使用:-v /usr/local/mysql/logs:/var/log/mysql
将mysql容器存放日志文件的目录:/var/log/mysql挂载在宿主机的/usr/local/mysql/logs下
3.删除容器和进入退出容器
# 停止运行容器
docker stop 容器名/容器ID
#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)
#进入容器(方式一)优雅的进入容器推荐
docker exec -it 容器名/容器ID /bin/bash
#进入容器(方式二)不推荐使用
docker attach 容器名/容器ID
#直接退出(如果没有添加-d 参数(持久化运行容器) 该容器会被关闭 )
exit
#优雅退出(无论是否添加-d 参数 容器都不会被关闭)
Ctrl + p + q
4. 用现有容器打包成镜像
# 构建一个新的镜像
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag
六、Docker Compose和docker-compose.yml
Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
构建三步骤:
1、编写Dockerfile文件
2、docker build命令构建镜像
3、docker run依镜像运行容器实例
1.构建镜像
# 构建镜像 (需要在Dockerfile同级目录下构建)
docker build -t cat:1.0 .
# 说明(-t:设置 镜像的名字及tag)(最后的. 为当前目录)
2.Dockerfile文件参数介绍
FROM
基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时需要运行的命令
两种格式
shell格式(1)
RUN yum -y install vim
exec格式(2)
["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
注意:RUN 是在 docker build时运行
EXPOSE
当前容器对外暴露出的端口
WORKDIR
指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
USER
指定该镜像以什么样的用户去执行,如果都不指定,默认是root
ENV
用来在构建镜像过程中设置环境变量
ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;
也可以在其它指令中直接使用这些环境变量,
比如:WORKDIR $MY_PATH
ADD
将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY
类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
COPY src dest
COPY ["src", "dest"]
<src源路径>:源文件或者源目录
<dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
VOLUME
容器数据卷,用于数据保存和持久化工作
CMD
指定容器启动后的要干的事情
注意:Dockerfile 中可以有多个 CMD 指令,
但只有最后一个生效,CMD 会被 docker run 之后的参数替换
3.docker-compose.yml
Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。
简而言之:
Docker-Compose是Docker官方的开源项目, 负责实现对Docker容器集群的快速编排。
3.1相关命令
docker-compose -h # 查看帮助
docker-compose up # 启动所有docker-compose服务
docker-compose up -d # 启动所有docker-compose服务并后台运行
docker-compose down # 停止并删除容器、网络、卷、镜像
docker-compose exec yml里面的服务id # 进入容器实例内部yml文件中写的服务id /bin/bash
docker-compose ps # 展示当前docker-compose编排过的运行的所有容器
docker-compose top # 展示当前docker-compose编排过的容器进程
docker-compose logs yml里面的服务id # 查看容器输出日志
docker-compose config # 检查配置
docker-compose config -q # 检查配置,有问题才有输出
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务
3.2更新容器配置
- 如果已经修改了docker-compose.yml文件,并且希望更新其中的某个容器,可以直接使用docker-compose up -d命令。该命令会更新docker-compose.yml中修改过的服务,并根据修改的设置进行重新配置。
例如:
docker-compose up -d service-name
其中 service-name是需要更新的服务名。 - 重新生成新容器
如果需要完全重启一个容器,并清除其中的所有数据,可以使用以下两个命令:
docker-compose stop service-name
docker-compose rm -f service-name
docker-compose up -d service-name
这会停止并删除名为 service-name
的容器,并根据docker-compose.yml重新启动它。这种方法比较适用于需要对容器进行某些比较复杂的更改,或者在更新过程中出现了一些问题。
参考文档:Docker常用命令总结---Pan_peter
docker官方文档
Docker Compose更新容器的几种方法---随猿Fa
解决docker国内镜像源问题---智驾-Sor大白
如有侵权如有侵权请联系作者删除