Note/环境/基本命令/Docker基本命令.md

714 lines
12 KiB
Markdown
Raw Normal View History

2023-08-31 11:30:31 +08:00
# Docker 的基本命令
## 1、简单运用
#### 1获取 Docker 镜像
```shell
docker pull [IMAGE_NAME:TAG]
```
通过该命令,可以从 Docker Hub 或其他镜像源获取指定名称和标签的 Docker 镜像。例如,执行以下命令可以获取 Docker 官方的 Nginx 镜像
```shell
docker pull nginx:latest
```
#### 2运行 Docker 容器
```shell
docker run [OPTIONS] IMAGE_NAME [COMMAND] [ARG...]
```
该命令用于在 Docker 中运行一个容器。其中IMAGE_NAME 是要使用的 Docker 镜像名称,而 OPTIONS 则为可选的参数,常用的参数包括
- `-d`以守护进程方式运行容器。
- `-p`将主机端口映射到容器端口。
- `--name`为容器指定一个名称。
- `-v`挂载主机目录到容器中。
- `--restart`设置容器退出时的重启策略等。
COMMAND 和 ARG... 则为可选的命令和参数。例如,运行一个名为 myapp 的容器,使用的镜像为 myimage80表示容器内部要映射的端口号主机上要映射到容器内部端口的端口号。可以执行以下命令
```shell
docker run -d -p 80:90 --name myapp myimage
```
#### 3查看当前所有正在运行的容器
```shell
docker ps
```
该命令用于列出当前所有正在运行的 Docker 容器,包括容器 ID、名称、所使用的镜像、状态等基本信息。
如果要查看所有容器,包括已经停止的容器,可以添加 `-a` 选项
```shell
docker ps -a
```
#### 4查看本地镜像列表
```shell
docker images
```
该命令用于列出本地已经保存的 Docker 镜像列表,包括镜像名称、标签、镜像 ID、大小等基本信息。
如果要查看某个特定镜像的详细信息,可以执行以下命令
```shell
docker images [IMAGE_NAME]
```
其中IMAGE_NAME 为要查看信息的镜像名称。
#### 5停止运行中的容器
```shell
docker stop [CONTAINER_ID/CONTAINER_NAME]
```
该命令用于停止指定 ID 或名称的 Docker 容器。例如,停止容器 ID 为 `1234567890ab` 的容器,可以执行以下命令
```shell
docker stop 1234567890ab
```
如果需要停止多个容器,可以依次添加多个容器的 ID 或名称,例如
```shell
docker stop container1 container2 ...
```
#### 6强制终止运行中的容器
```shell
docker kill [CONTAINER_ID/CONTAINER_NAME]
```
该命令用于强制终止运行中的容器。与 `docker stop` 命令不同,`docker kill` 命令会直接杀死容器进程,不会给容器发送停止信号。例如,强制终止名为 myapp 的容器,可以执行以下命令
```shell
docker kill myapp
```
#### 7删除已经停止的容器
```shell
docker rm [CONTAINER_ID/CONTAINER_NAME]
```
该命令用于删除指定 ID 或名称的停止状态 Docker 容器。例如,删除名称为 myapp 的容器,可以执行以下命令
```shell
docker rm myapp
```
如果需要批量删除已停止的容器,可以依次添加多个容器的 ID 或名称,例如
```shell
docker rm container1 container2 ...
```
#### 8删除不再使用的镜像
```shell
docker rmi [IMAGE_ID/IMAGE_NAME]
```
该命令用于删除本地不再需要使用的 Docker 镜像。其中IMAGE_ID/IMAGE_NAME 为要删除的镜像的 ID 或名称。例如,删除镜像 ID 为 `0123456789ab` 的 Docker 镜像,可以执行以下命令
```shell
docker rmi 0123456789ab
```
如果需要删除某个名称的所有镜像,也可以通过名称来删除镜像,例如
```shell
docker rmi myimage
```
如果要删除本地所有不再使用的镜像,可以执行以下命令
```shell
docker rmi $(docker images -f "dangling=true" -q)
```
#### 9进入正在运行的容器
```shell
docker exec -it [CONTAINER_ID/CONTAINER_NAME] /bin/bash
```
该命令用于进入正在运行的 Docker 容器中。其中,`-it` 选项表示以交互式终端方式进入容器,`/bin/bash` 则是指定进入容器后要执行的命令。
例如,进入容器 ID 为 `0123456789ab` 的容器,可以执行以下命令
```shell
docker exec -it 0123456789ab /bin/bash
```
#### 10查看容器日志
```shell
docker logs [CONTAINER_ID/CONTAINER_NAME]
```
该命令用于查看指定 ID 或名称的 Docker 容器的日志输出。例如,查看名称为 myapp 的容器的日志输出,可以执行以下命令
```shell
docker logs myapp
```
## 2、详细命令
### 1、镜像管理
#### 1查看镜像
```shell
docker image is
```
```shell
docker images
```
#### 2检索镜像
```shell
docker search [image]
```
例子
```shell
docker search negix
```
#### 3拉取镜像
```shell
docker pull [image]
```
#### 4上传镜像
```shell
docker push [image]
```
例子
```shell
docker push yovinchen/docker-test:latest
```
#### 5保存镜像
```shell
docker save [image] -o FILE/
```
```shell
docker save [image] >FILE
```
例子
```shell
docker save yovinchen/docker-test:latest >docker-test.tar
```
#### 6导入镜像
```shell
docker load -i FILE
```
例子
```shell
docker load -i hello-docker.tar
```
#### 7查看历史镜像
```shell
docker history [image]
```
#### 8删除镜像
```shell
docker rmi [image]
```
```shell
docker image rm [imaeg]
```
#### 9删除不再使用的镜像
```shell
docker image prune
```
#### 10将文件系统导入为镜像
```shell
docker import [URL/FILE]
```
#### 11从容器创建镜像
```shell
docker commit [container][image]
```
### 2、网络管理
#### 1列出可⽤⽹络
```shell
docker network ls
```
#### 2查看⽹络详细信息
```shell
docker network inspect [network]
```
#### 3创建⼀个新的⽹络
```shell
docker network create [network]
```
#### 4删除⼀个⽹络
```shell
docker network rm [network]
```
#### 5将容器连接到⽹络
```shell
docker network connect [network] [container]
```
#### 6将容器从⽹络断开
```shell
docker network disconnect [network] [container]
```
### 3、插件管理
#### 1列出插件
```shell
docker plugin ls
```
#### 2安装插件
```shell
docker plugin install [plugin]
```
#### 3启⽤插件
```shell
docker plugin enable [plugin]
```
#### 4禁⽤插件
```shell
docker plugin disable [plugin]
```
#### 5卸载插件
```shell
docker plugin rm [plugin]
```
### 4、容器管理
#### 1创建容器仅创建不运行
```shell
docker create [image]
```
#### 2创建并运行容器
```shell
docker run [image]
```
#### 3启动容器
```shell
docker start [container]
```
#### 4停止容器
```shell
docker stop [container]
```
#### 5重启容器
```shell
docker restart [container]
```
#### 6列出正在运行的容器
```shell
docker ps
docker container ls
```
#### 7列出所有容器
```shell
docker ps -a
```
```shell
docker container ls -a
```
#### 8以交互模式进入容器
```shell
docker exec -it [container] bash
```
```shell
docker attach [container]
```
#### 9导出容器快照到文件
```shell
docker export [container] -o FILE
```
```shell
docker export [container] > FILE
```
#### 10导入容器快照
```shell
docker import FILE
```
#### 11查看容器日志
```shell
docker logs [container]
```
#### 12删除容器
```shell
docker rm [container]
```
```shell
docker container rm [container]
```
#### 13查看容器端口映射
```shell
docker port [container]
```
#### 14显示容器内进程
```shell
docker top [container]
```
#### 15复制本地文件到容器内指定路径
```shell
docker cp [FILE] [container]:[PATH]
```
#### 16显示容器内的变化
```shell
docker diff [container]
```
#### 17显示容器资源使用情况
```shell
docker stats [container]
```
### 5、数据卷管理
#### 1创建一个数据卷
```shell
docker volume create [volume]
```
#### 2查看数据卷列表
```shell
docker volume ls
```
#### 3查看数据卷详细信息
```shell
docker volume inspect [volume]
```
#### 4删除数据卷
```shell
docker volume rm [volume]
```
#### 5删除所有未使用的数据卷
```shell
docker volume prune
```
### 6、日常操作
#### 1查看Docker系统信息
```shell
docker info
```
#### 2查看Docker版本
```shell
docker version
```
#### 3查看Docker帮助文档
```shell
docker --help
```
#### 4查看Docker命令帮助
```shell
docker [command] --help
```
#### 5登录DockerHub
```shell
docker login
```
#### 6退出DockerHub
```shell
docker logout
```
### 7、容器运行
语法格式
```shell
docker run [options] image [command] [arg...]
```
#### 1创建运行并命名容器
```shell
shell复制代码docker run --name [name] [image]
```
#### 2创建一个容器并后台运行
```shell
shell复制代码docker run -d [image]
```
#### 3创建一个容器并指定端口映射
```shell
shell复制代码docker run -p [hostPort]:[containerPort] [image]
```
#### 4创建一个容器并随机分配端口映射
```shell
shell复制代码docker run -P [image]
```
#### 5创建一个容器并指定环境变量
```shell
shell复制代码docker run -e [key=value] [image]
```
#### 6创建一个容器并指定工作目录
```shell
shell复制代码docker run -w [PATH] [image]
```
#### 7创建一个容器并指定容器名称
```shell
shell复制代码docker run --name [name] [image]
```
#### 8创建一个容器并在容器中执行命令交互模式
```shell
shell复制代码docker run [image] [command]
```
#### 9创建一个容器并指定容器名称、后台运行、端口映射、环境变量、工作目录
```shell
shell复制代码docker run -d -p [hostPort]:[containerPort] -e [key=value] -w [PATH] --name [name] [image]
```
#### 10使用镜像nginx:latest来启动一个容器并在容器内执行交互式bash shell
```shell
shell复制代码docker run -it nginx:latest /bin/bash
```
#### 11创建一个MySQL容器后台模式启动将主机的80端口映射到容器的80端口将主机的/data目录映射到容器的/data目录
```shell
shell复制代码docker run -it -p 3316:3306 -v /data:/data -d mysql:latest
```
### 8、常用Dockerfile指令
#### 1指定基础镜像必须为Dockerfile的第⼀条指令
```shell
FROM [base_image]
```
#### 2⽤于将⽂件复制到镜像中源可以使URL或者本地⽂件也可以⼀个压缩⽂件⾃动解压
```shell
2024-01-12 10:13:34 +08:00
ADD [--chown=<user>:<group>] [源路径] [⽬标路径]
2023-08-31 11:30:31 +08:00
```
#### 3⽤于将⽂件拷⻉到镜像中源只能是本地⽂件
```shell
COPY [--chown=<user>:<group>] [源路径] [⽬标路径]
```
#### 4⽤于指定⼯作⽬录可以使⽤多个WORKDIR指令如果使⽤相对路径则是相对于上⼀条WORKDIR指令所指定的⽬录
```shell
WORKDIR [PATH]
```
#### 5⽤于设置环境变量
```shell
ENV <key> <value>
```
```shell
ENV <key1>=<value1> <key2>=<value2> ...
```
#### 6⽤于指定默认的容器主进程每个Dockerfile中只能有⼀条CMD指令如果有多条则只有最后⼀条会⽣效
```shell
CMD <命令>
```
```shell
CMD ["可执⾏⽂件", "参数1", "参数2" ...]
```
#### 7⽤于定义匿名卷持久化⽬录
```shell
VOLUME <路径>
```
```shell
VOLUME ["路径1", "路径2"...]
```
2024-01-12 10:13:34 +08:00
#### 8声明镜像创建者
```shell
MAINTAINER user_name
```
## Docker 开放2375端口
开启端口命令 --permanent永久生效没有此参数重启后失效
```shell
firewall-cmd --zone=public --add-port=2375/tcp --permanent
```
重新载入
```shell
firewall-cmd --reload
```
使用 vimvi 编辑docker服务配置文件
```shell
vim /lib/systemd/system/docker.service
```
找到如下配置行
```shell
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
```
将其注释掉或者直接删除,替换成下面的配置行.然后保存退出
```shell
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
```
重新加载docker配置并重启服务
```shell
systemctl daemon-reload && systemctl restart docker
```
然后直接在命令行客户端输入如下命令IP地址改为自己的
```shell
curl http://IP地址:2375/version
```
或者在浏览器直接访问IP地址改为自己的
```shell
http://IP地址:2375/version
```