@@ -145,8 +145,8 @@ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
145145比如:
146146
147147``` bash
148- docker pull ubuntu:18.04
149- docker pull eesast/thuai_server
148+ $ docker pull ubuntu:18.04
149+ $ docker pull eesast/thuai_server
150150```
151151
152152上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。第一条命令中镜像名称是 ` ubuntu:18.04 ` ,因此将会获取官方镜像 ` library/ubuntu ` 仓库中标签为 ` 18.04 ` 的镜像。第二条命令中镜像名称是` eesast/thuai_server ` ,因此会获取` eesast/thuai_server ` 仓库中最新的镜像。
@@ -202,15 +202,15 @@ ubuntu latest f753707788c5 4 weeks ago
202202这类无标签镜像被称为 ** 虚悬镜像(dangling image)** ,一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
203203
204204``` bash
205- docker image prune
205+ $ docker image prune
206206```
207207
208208### 删除本地镜像
209209
210210如果要删除本地的镜像,可以使用 ` docker image rm ` 命令,其格式为:
211211
212212``` bash
213- docker image rm [选项] < 镜像1> [< 镜像2> ...]
213+ $ docker image rm [选项] < 镜像1> [< 镜像2> ...]
214214```
215215
216216#### 用 ID、镜像名、摘要删除镜像
@@ -233,13 +233,13 @@ nginx latest e43d811ce2f4 5 weeks ago
233233比如这里,如果我们要删除 ` redis:alpine ` 镜像,可以执行:
234234
235235``` bash
236- docker image rm 501
236+ $ docker image rm 501
237237```
238238
239239我们也可以用` 镜像名 ` ,也就是 ` <仓库名>:<标签> ` ,来删除镜像。
240240
241241``` bash
242- docker image rm centos
242+ $ docker image rm centos
243243```
244244
245245## 操作容器
@@ -446,7 +446,7 @@ trusting_newton
446446用 ` docker container ls -a ` 命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用下面的命令可以清理掉所有处于终止状态的容器。
447447
448448``` bash
449- docker container prune
449+ $ docker container prune
450450```
451451
452452## 访问仓库(略)
@@ -463,7 +463,7 @@ docker container prune
463463
464464#### 注册
465465
466- 你可以在 < https://hub.docker.com> 免费注册一个 Docker 账号。
466+ 你可以在 https://hub.docker.com 免费注册一个 Docker 账号。
467467
468468#### 登录
469469
@@ -541,7 +541,7 @@ username/ubuntu
541541#### 创建一个数据卷
542542
543543``` bash
544- docker volume create my-vol
544+ $ docker volume create my-vol
545545```
546546
547547查看所有的 ` 数据卷 `
@@ -586,7 +586,7 @@ $ docker run -d -P \
586586在主机里使用以下命令可以查看 ` web ` 容器的信息
587587
588588``` bash
589- docker inspect web
589+ $ docker inspect web
590590```
591591
592592` 数据卷 ` 信息在 "Mounts" Key 下面
@@ -609,15 +609,15 @@ docker inspect web
609609#### 删除数据卷
610610
611611``` bash
612- docker volume rm my-vol
612+ $ docker volume rm my-vol
613613```
614614
615615` 数据卷 ` 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除 ` 数据卷 ` ,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 ` 数据卷 ` 。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 ` docker rm -v ` 这个命令。
616616
617617无主的数据卷可能会占据很多空间,要清理请使用以下命令
618618
619619``` bash
620- docker volume prune
620+ $ docker volume prune
621621```
622622
623623### 挂载主机目录
@@ -706,7 +706,7 @@ $ docker logs -f nostalgic_morse
706706使用 ` hostPort:containerPort ` 格式本地的 5000 端口映射到容器的 5000 端口,可以执行
707707
708708``` bash
709- docker run -d -p 5000:5000 training/webapp python app.py
709+ $ docker run -d -p 5000:5000 training/webapp python app.py
710710```
711711
712712此时默认会绑定本地所有接口上的所有地址。
@@ -716,21 +716,21 @@ docker run -d -p 5000:5000 training/webapp python app.py
716716可以使用 ` ip:hostPort:containerPort ` 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1
717717
718718``` bash
719- docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
719+ $ docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
720720```
721721
722722#### 映射到指定地址的任意端口
723723
724724使用 ` ip::containerPort ` 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口。
725725
726726``` bash
727- docker run -d -p 127.0.0.1::5000 training/webapp python app.py
727+ $ docker run -d -p 127.0.0.1::5000 training/webapp python app.py
728728```
729729
730730还可以使用 ` udp ` 标记来指定 ` udp ` 端口
731731
732732``` bash
733- docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
733+ $ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
734734```
735735
736736#### 查看映射端口配置
@@ -765,7 +765,7 @@ $ docker run -d \
765765下面先创建一个新的 Docker 网络。
766766
767767``` bash
768- docker network create -d bridge my-net
768+ $ docker network create -d bridge my-net
769769```
770770
771771` -d ` 参数指定 Docker 网络类型,有 ` bridge ` ` overlay ` ` host ` 。其中 ` host ` 网络类型用于将端口直接暴露到宿主机的网络中,` overlay ` 网络类型用于 ` Swarm mode ` ,在本小节中你可以忽略它。
@@ -775,13 +775,13 @@ docker network create -d bridge my-net
775775运行一个容器并连接到新建的 ` my-net ` 网络
776776
777777``` bash
778- docker run -it --rm --name busybox1 --network my-net busybox sh
778+ $ docker run -it --rm --name busybox1 --network my-net busybox sh
779779```
780780
781781打开新的终端,再运行一个容器并加入到 ` my-net ` 网络
782782
783783``` bash
784- docker run -it --rm --name busybox2 --network my-net busybox sh
784+ $ docker run -it --rm --name busybox2 --network my-net busybox sh
785785```
786786
787787再打开一个新的终端查看容器信息
@@ -835,9 +835,9 @@ Dockerfile 是一个文本文件,其内包含了一条条的 **指令(Instruct
835835在一个空白目录中,建立一个文本文件,并命名为 ` Dockerfile ` :
836836
837837``` bash
838- mkdir mynginx
839- cd mynginx
840- touch Dockerfile
838+ $ mkdir mynginx
839+ $ cd mynginx
840+ $ touch Dockerfile
841841```
842842
843843其内容为:
@@ -1058,7 +1058,7 @@ docker: Error response from daemon: invalid header field value "oci runtime erro
10581058那么如果我们希望加入 ` -i ` 这参数,我们就必须重新完整的输入这个命令:
10591059
10601060``` bash
1061- docker run myip curl -s https://ip.cn -i
1061+ $ docker run myip curl -s https://ip.cn -i
10621062```
10631063
10641064这显然不是很好的解决方案,而使用 ` ENTRYPOINT ` 就可以解决这个问题。现在我们重新用 ` ENTRYPOINT ` 来实现这个镜像:
@@ -1268,7 +1268,7 @@ COPY ./package.json /app/
12681268
12691269这并不是要复制执行 ` docker build ` 命令所在的目录下的 ` package.json ` ,也不是复制 ` Dockerfile ` 所在目录下的 ` package.json ` ,而是复制 ** 上下文(context)** 目录下的 ` package.json ` 。
12701270
1271- 因此,` COPY ` 这类指令中的源文件的路径都是_相对路径 _ 。这也是初学者经常会问的为什么 ` COPY ../package.json /app ` 或者 ` COPY /opt/xxxx /app ` 无法工作的原因,因为这些路径已经超出了上下文的范围,Docker 引擎无法获得这些位置的文件。如果真的需要那些文件,应该将它们复制到上下文目录中去。
1271+ 因此,` COPY ` 这类指令中的源文件的路径都是 * 相对路径 * 。这也是初学者经常会问的为什么 ` COPY ../package.json /app ` 或者 ` COPY /opt/xxxx /app ` 无法工作的原因,因为这些路径已经超出了上下文的范围,Docker 引擎无法获得这些位置的文件。如果真的需要那些文件,应该将它们复制到上下文目录中去。
12721272
12731273现在就可以理解刚才的命令 ` docker build -t nginx:v3 . ` 中的这个 ` . ` ,实际上是在指定上下文的目录,` docker build ` 命令会将该目录下的内容打包交给 Docker 引擎以帮助构建镜像。
12741274
0 commit comments