Docker 基本命令注意点
前言:
a. 本文主要为 Docker的视频教程 笔记。
b. 本机环境为 Windows 10 专业版,使用的命令行为 PowerShell。
1. docker run -d 表示在后台运行,不加 -d 表示依附于当前的命令行运行
例如:使用 Docker 运行一个 alpine 的镜像,并开启一个终端。如果不使用 “-d” 参数会直接在当前命令行响应
PS C:\Users\XXX> docker run -it alpine /bin/sh
/ #
注:直接使用 docker run + <容器> 而不使用 “-it” 参数会使容器执行完毕后很快退出。故如果要运行服务镜像,就应使用让容器阻塞的命令。
2. docker 命令有分组
使用 docker image 命令查看 docker 在 image 组中的命令, 使用 docker container 命令查看docker container组中的命令。
很多命令为简写:如 docker container ps -a 可简写为 docker ps -a。
3. 查看镜像的具体信息
使用 docker image inspect 命令。在 PowerShell 中配合使用 findstr /i version 可以查看某些镜像中软件的版本(在Linux下可以配合使用 grep -i version )
4. 镜像的导出和导入
原环境:
PS C:\Users\XXX> docker images | findstr busybox
busybox latest be5888e67be6 2 weeks ago 1.22MB
导出:
docker image save -o <OUT_FILE_NAME> <WHICH_IMAGE>
例如:docker image save -o docker_busybox.tar.gz busybox:latest
此时执行:docker image rm busybox 删除 busybox 镜像
PS C:\Users\XXX> docker images | findstr busybox
PS C:\Users\XXX>
导入:
docker image load -i <FILE_PATH>
例如: docker image load -i .\docker_busybox.tar.gz
5. 查看容器
docker container ls -a -l
其中 “-a” 表示查看所有容器,包括未启动的容器;“-l” 表示查看最近启动的一条
6. 删除所有容器
在 PowerShell 中为:
docker container rm -f $(docker ps -a -q)
(在 Linux 中为 docker container rm -f `docker ps -a -q`)可以删除所有容器 (存在容器的情况下)。
7. 附加到容器的命令行
首先运行一个 alpine 镜像:docker run -it -d alpine /bin/sh,之后使用 docker attach <CONTAINER_ID> 附加到该命令行。
注1:此时如果再开启一个终端附加到容器的命令行,二者会同步显示
注2:使用 exit 命令退出附加后,容器会停止
可以使用 Ctrl+P 和 Ctrl + Q 取消附加(取消后不停止)
推荐使用 docker container exec -it 命令
注3:使用 echo "
6. 完整查看容器的启动信息(即使太长也不省略)
docker ps -a -l --no-trunc
7. 端口号的分配
-
docker run -p 表示指定端口号映射,docker run -P 表示自动分配端口
-
docker -p
:<HOST_PORT>:<CONTAINER_PORT> 利用多ip增加对同一端口的复用 由于对 Windows 中的分配多个ip地址不熟悉,因此使用操作系统为 CentOS7 的云服务器
先使用 ifcofig eth0 查看网卡信息
[root@VM_0_2_centos ~]# ifconfig eth0 | grep inet
inet 172.21.0.2 netmask 255.255.240.0 broadcast 172.21.15.255之后再同一网段为该网卡新增一个ip
[root@VM_0_2_centos ~]# ifconfig eth0:1 172.21.0.3 netmask 255.255.240.0 up
使用 ping 命令 ping 172.21.0.3 可以得到响应
使用两个地址分别运行 nginx[root@VM_0_2_centos ~]# docker run -d -p 172.21.0.2:8080:80 nginx
[root@VM_0_2_centos ~]# docker run -d -p 172.21.0.3:8080:80 nginx
进入两个容器中的 /usr/share/nginx/html 目录,修改 index.html 文件由于没有GUI,使用 curl 命令访问:
[root@VM_0_2_centos ~]# curl 172.21.0.2:8080
hello from 172.21.0.2
[root@VM_0_2_centos ~]# curl 172.21.0.3:8080
hello from 172.21.0.3成功!
-
docker -p <IP>::<CONTAINER_PORT> 宿主机分配随机端口
-
docker -p <HOST_PORT>:<CONTAINER_PORT>/udp 表示分配udp的端口
-
docker -p <IP>::<CONTAINER_PORT>/udp 表示随机分配udp的端口
-
可以多次使用 “-p” 指定多个端口映射
注:以上操作都在宿主机上进行