[SOP]docker的安装和使用
2025/12/28大约 6 分钟
[SOP]docker的安装和使用
- docker官网:https://docs.docker.com/get-started/
1、解决docker的4大类命令
Linux管理docker服务相关命令
● 启动 docker 服务
○ systemctl start docker
● 停止 docker 服务
○ systemctl stop docker
● 重启 docker 服务
○ systemctl restart docker
● 查看 docker 服务状态
○ systemctl status docker
● 设置开机启动 docker 服务
○ systemctl enable dockerdocker常用命令
docker build # 构建镜像
docker run # 启动容器
docker ps # 查看运行中的容器
docker stop # 停止容器
docker rm # 删除容器
docker rmi # 删除镜像技巧1:使用docker-compose命令docker-compose.yml解决一键部署
docker-compose 通过一个 docker-compose.yml 文件,定义多个容器如何一起运行。
docker-compose命令是多容器编排工具,使用.yml文件来管理多个容器。
- 【注意!】Docker 默认只识别:docker-compose.yml,下面这些 默认不会被识别:
- Docker-compose.yml(除非显式指定)
- docker-compose.YML(除非显式指定)
- docker-compose.yaml (除非显式指定)
比如
docker-compose -f Docker-compose.yml up技巧2:编写dockfile文件构建1个专属镜像解决CICD服务器
【注意】Dockerfile 必须首字母大写
- Docker 默认只识别:Dockerfile
- 以下默认不会识别:
- dockerfile
- DockerFile
- DOCKERFILE
其他注意事项
- 1、Dockerfile指令不区分大小写。但是,约定是将它们大写,以便更容易地将它们与参数区分开来。
- 2、Dockerfile按顺序运行指令。一个Dockerfle必须以FROM开始的指令。这可能在解析器指令、注释和全局范围的 ARG 之后。
该FROM指令指定您正在构建的父镜像。FROM前面只能有一个或多个ARG指令 - 3、以
#开始作为注释,除非该行是一个有效的解析器指令。
#在行中任何其他位置的标记都被视为参数。
如 1 Comment 2 RUN echo'we are running some # of cool things'- 4、注释中不支持换行符。
- 5、FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。 所以过多无意义的层,会造成镜像膨胀过大。
所以有2个东西,你肯定想要学!
- 【1】以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
- 【2】那么如果一行命令很长咋办,那就使用\来换行啊!
我有一个centos内核版本为4.3的系统,我在这个系统上装了1个docker
现在,我想要编写一个dockerfile来获取新的功能
要求写个dockerfile,具体细节如下
1、指定特定版本的centos,内核至少是6.3
2、然后再这个系统中安装yum install librsvg2 librsvg2-devel librsvg2-tools -y
3、最后调用这个系统的rsvg-convert -vdocker hub
1.docker的本地(local)和远程(remote)交互
docker login -u <username>其实使用自己邮箱也可以!
➜ ~ docker login -u whoway2017@qq.com
i Info → A Personal Access Token (PAT) can be used instead.
To create a PAT, visit https://app.docker.com/settings
Password:
Login Succeededdocker login 更推荐 docker login -u <username>
docker pull
docker push
# 从Docker Hub查找镜像
docker search- 其实,我觉得比如,阿里的也可以查找
docker search centos镜像和容器
- 容器是由镜像实例化而来。简单来说,镜像(images)是文件,容器(container)是进程
- 命令格式3部分
- docker 命令名称 其他参数
2.镜像(images)相关命令
# 列出本地镜像。这个可以查看那docker pull 某镜像 ,命令是否执行成功
docker images
# rmi命令的来源(rm + images)删除本地一个或多个**镜像**
docker rmi
docker rmi [OPTIONS] IMAGE [IMAGE...]# docker tag :** 标记本地镜像,将其归入**某一仓库**。
docker tag⭐[注意仓库理解]举例子
root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker images runoob/ubuntu:v3
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/ubuntu v3 4e3b13c8a266 3 months ago 136.3 MB3.容器(container)相关命令
# 容器生命周期管理(大概类似进程管理)
# 创建一个新的容器**并**运行一个命令,你就当做go run main.go
docker run
**docker start** :启动一个或多个已经**被停止**的容器
**docker stop** :**停止**一个运行中的容器
**docker restart** :重启容器
docker start/stop/restart
# 杀掉一个运行中的容器。 类似杀死进程了
docker kill
# 删除一个或多个容器
docker rm
# 创建一个新的容器但不启动它(注意和run命令区别)
docker createdocker pause/unpause
docker pause : 暂停容器中所有的进程。
docker unpause : 恢复容器中所有的进程。
区别docker stop和docker pause
1、stop命令用于停止一个运行中的容器,pause命令用于暂停容器中的所有进程;
2、使用stop命令容器内主进程会在指定时间内被杀死,默认为十秒,使用pause命令会挂起指定容器中的所有进程。
docker exec 命令⭐⭐⭐
docker exec :在运行的容器中执行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec [选项] 容器 命令 [ARG...]OPTIONS说明:
- **-d 😗*分离模式: 在⭐后台运行⭐
- **-i 😗*即使没有附加也保持STDIN 打开
- **-t 😗*分配一个⭐伪终端⭐(方法2,使用docker desktop里面的终端)
在容器 mynginx 中开启一个交互模式的终端:
runoob@runoob:~$ docker exec -i -t mynginx /bin/bash
root@b1a0703e41e7:/#3.2.获取-容器本身更多信息(类似进程信息)
docker port⭐
docker port 用于列出指定的容器的端口映射,或者查找将 PRIVATE_PORT NAT 到面向公众的端口。
⭐常用:比如。用来给vscode链接我本地的docker中的Linux
docker top
**docker top 😗*查看容器中运行的进程信息,支持 ps 命令参数。
4.关于docker的FAQ
4.1.docker疑难杂症:docker命令Tab无法自动补全
- bash的解决方案:
今天在敲命令时,发现docker无法自动补全镜像名和其他参数,这样使用效率大大降低,然后百度找方法,下面是解决方法
一、安装bash-complete
yum install -y bash-completion
1
二、刷新文件
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/bash_completion
1
2
简单两步,就可以Tab补全我们的镜像名和命令了。
原文链接:https://blog.csdn.net/qq_39680564/article/details/970266564.2.zsh的解决方案(2个链接都要看)
https://developer.aliyun.com/article/914947
➜ ~ mkdir -p ~/.zsh/completion
➜ ~ curl -L https://raw.githubusercontent.com/docker/compose/1.27.4/contrib/completion/zsh/_docker-compose > ~/.zsh/completion/_docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 28 ms: Connection refused
➜ ~ curl -L https://raw.githubusercontent.com/docker/compose/1.27.4/contrib/completion/zsh/_docker-compose > ~/.zsh/completion/_docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 18078 100 18078 0 0 19445 0 --:--:-- --:--:-- --:--:-- 19501
➜ ~ vim ~/.zshrc- .zshrc里面放
fpath=(~/.zsh/completion $fpath)
autoload -Uz compinit && compinit -i# 创建对应的目录
$ mkdir -p ~/.zsh/completion
# 从docker安装目录中获取补全插件
$ ll /Applications/Docker.app/Contents/Resources/etc
-rw-r--r--@ 1 Escape admin 13K 8 27 19:44 docker-compose.bash-completion
-rw-r--r--@ 1 Escape admin 19K 8 27 19:44 docker-compose.zsh-completion
-rw-r--r--@ 1 Escape admin 12K 8 27 19:44 docker-machine.bash-completion
-rw-r--r--@ 1 Escape admin 13K 8 27 19:44 docker-machine.zsh-completion
-rwxr-xr-x@ 1 Escape admin 105K 8 27 19:44 docker.bash-completion
-rwxr-xr-x@ 1 Escape admin 49K 8 27 19:44 docker.fish-completion
-rwxr-xr-x@ 1 Escape admin 123K 8 27 19:44 docker.zsh-completion
# 配置到zsh配置目录中
$ cp /Applications/Docker.app/Contents/Resources/etc/docker.zsh-completion ~/.zsh/completion/_docker
$ cp /Applications/Docker.app/Contents/Resources/etc/docker-compose.zsh-completion ~/.zsh/completion/_docker-compose
$ cp /Applications/Docker.app/Contents/Resources/etc/docker-machine.zsh-completion ~/.zsh/completion/_docker-machine
$ source ~/.zshrc
# 重载zsh配置
$ docker image
image -- Manage images
images -- List images
import -- Import the contents from a tarball to create a filesystem image