前提准备
- 宿主机操作系统
Win10
Docker desktop community 2.1.0.5(40683)
Docker version 19.03.5, build 633a0ea
常用命令
1. 运行 Docker HelloWorld
-
初次使用
docker run
运行HelloWorld
docker run ubuntu /bin/echo "Hello world" Hello world
这是本机首次运行
docker run
,该命令会导致docker
会从docker hub
下载相应的镜像(image
)ubuntu
,在本机实例化它的一个容器,启动该容器,并在该容器中运行/bin/echo "Hello world"
,然后停止该容器的运行;对该命令的解释 :
- 容器(
container
)操作系统使用了ubuntu
; - 在宿主机命令行终端执行以上命令,显示
Hello world
然后返回宿主机命令行终端; - 如果本地镜像(
image
)列表中不存在ubuntu
则会尝试从docker hub
获取:
例如 :latest: Pulling from library/ubuntu
- 容器(
-
docker ps
查看运行中的容器docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
对该命令的解释 :
- 使用
docker container ls
效果跟该命令相同。 - 执行
docker run ubuntu /bin/echo "Hello world"
结束后,再执行docker ps
,输出结果为空,原因是docker ps
只输出运行中的容器,而该容器已经停止运行。使用docker ps -a
可以看到该容器的状态,如下所示。
- 使用
-
docker ps
查看所有容器:运行中的+已经结束的docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 637db579c54a ubuntu "/bin/echo 'Hello wo…" 8 minutes ago Exited (0) 8 minutes ago thirsty_rubin
对该命令的解释 :
- 使用
docker container ls -a
效果跟该命令相同。 - 从该命令的输出结果可以看出,上面执行
Hello World
命令所所使用的容器已经处于退出状态,也就是不在处于运行状态了。
- 使用
-
docker image ls
查看本地镜像docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 775349758637 4 weeks ago 64.2MB
对该命令的解释 :
从该命令的输出可以看到,最初本机是没有任何镜像文件的,但是通过上面的Hello World
命令,本机出现了一个ubuntu
镜像文件。该镜像文件其实就是docker
从docker hub
中拉取下来的。
2. 跟容器交互
上面执行完Hello World
命令之后,我们知道相应的容器已经停止了,现在我们再启动镜像ubuntu
的一个容器并进入容器进行操作。
-
启动并进入容器命令行
docker run -it ubuntu /bin/bash root@c579ada9f94b:/#
对该命令的解释 :
- 该命令行会使用镜像
ubuntu
启动一个新的容器对象,该容器跟上面步骤中的容器是不同的容器对象。 - 此时我们会离开宿主机命令行,进入到了容器操作系统
ubuntu
的bash
命令行中。
使用宿主机其他命令行运行
docker ps
确认该容器跟上面运行Hello World
命令时的容器不同 :docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c579ada9f94b ubuntu "/bin/bash" 10 minutes ago Up 10 minutes vigorous_blackwell 826d239a93b5 ubuntu "/bin/echo 'Hello wo…" 25 minutes ago Exited (0) 25 minutes ago strange_mendel
这里多出了一个容器
CONTAINER ID
为c579ada9f94b
,这就是我们正在运行bash
命令的容器,而运行Hello World
命令时容器的CONTAINER ID
是637db579c54a
,已经停止,注意这两个容器是不同的。 - 该命令行会使用镜像
-
容器变动后保存到镜像(比如在容器中安装或者卸载了软件)
- 找到相应容器最新的状态
docker ps -l
- 提交容器最新变化到镜像
docker commit {container} {image}
-
连接到运行中的容器
docker exec -it 229 /bin/bash
例子解释 :
229
是容器CONTAINER ID
的前缀;
-
从容器中复制文件到宿主机
docker cp 229:/README.md .
例子解释 : 复制容器文件系统文件
./README.md
到宿主机文件系统当前路径229
是容器CONTAINER ID
的前缀;/README.md
是容器中的一个文件的绝对路径;.
是宿主机当前路径;
-
从宿主机复制文件到容器
docker cp application.yml 229:/application.yml ``` 例子解释 : 复制宿主机文件系统当前目录下文件`application.yml`到容器文件系统根目录 1. `229` 是容器`CONTAINER ID` 的前缀; 2. `application.yml` 表示宿主机文件系统当前目录的一个文件;
3. 发布自己的镜像
- 前提
1.docker hub
上要有自己的账号,比如andy
2.docker hub
上自己账号下面要有repository
:pristine
- 命令行
docker tag 1760 andy/pristine:andy-ubuntu docker push andy/pristine:andy-ubuntu