diff --git a/container/stop.md b/container/stop.md index 77dd732..1c00fe4 100644 --- a/container/stop.md +++ b/container/stop.md @@ -12,7 +12,6 @@ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ba267838cc1b ubuntu:18.04 "/bin/bash" 30 minutes ago Exited (0) About a minute ago trusting_newton -98e5efa7d997 training/webapp:latest "python app.py" About an hour ago Exited (0) 34 minutes ago backstabbing_pike ``` 处于终止状态的容器,可以通过 `docker container start` 命令来重新启动。 diff --git a/data_management/bind-mounts.md b/data_management/bind-mounts.md index 8c9ac30..278d12f 100644 --- a/data_management/bind-mounts.md +++ b/data_management/bind-mounts.md @@ -7,29 +7,27 @@ ```bash $ docker run -d -P \ --name web \ - # -v /src/webapp:/opt/webapp \ - --mount type=bind,source=/src/webapp,target=/opt/webapp \ - training/webapp \ - python app.py + # -v /src/webapp:/usr/share/nginx/html \ + --mount type=bind,source=/src/webapp,target=/usr/share/nginx/html \ + nginx:alpine ``` -上面的命令加载主机的 `/src/webapp` 目录到容器的 `/opt/webapp`目录。这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,以前使用 `-v` 参数时如果本地目录不存在 Docker 会自动为你创建一个文件夹,现在使用 `--mount` 参数时如果本地目录不存在,Docker 会报错。 +上面的命令加载主机的 `/src/webapp` 目录到容器的 `/usr/share/nginx/html`目录。这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,以前使用 `-v` 参数时如果本地目录不存在 Docker 会自动为你创建一个文件夹,现在使用 `--mount` 参数时如果本地目录不存在,Docker 会报错。 Docker 挂载主机目录的默认权限是 `读写`,用户也可以通过增加 `readonly` 指定为 `只读`。 ```bash $ docker run -d -P \ --name web \ - # -v /src/webapp:/opt/webapp:ro \ - --mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \ - training/webapp \ - python app.py + # -v /src/webapp:/usr/share/nginx/html:ro \ + --mount type=bind,source=/src/webapp,target=/usr/share/nginx/html,readonly \ + nginx:alpine ``` -加了 `readonly` 之后,就挂载为 `只读` 了。如果你在容器内 `/opt/webapp` 目录新建文件,会显示如下错误 +加了 `readonly` 之后,就挂载为 `只读` 了。如果你在容器内 `/usr/share/nginx/html` 目录新建文件,会显示如下错误 ```bash -/opt/webapp # touch new.txt +/usr/share/nginx/html # touch new.txt touch: new.txt: Read-only file system ``` @@ -48,7 +46,7 @@ $ docker inspect web { "Type": "bind", "Source": "/src/webapp", - "Destination": "/opt/webapp", + "Destination": "/usr/share/nginx/html", "Mode": "", "RW": true, "Propagation": "rprivate" diff --git a/data_management/volume.md b/data_management/volume.md index 89d6d73..27f388a 100644 --- a/data_management/volume.md +++ b/data_management/volume.md @@ -10,7 +10,7 @@ * `数据卷` 默认会一直存在,即使容器被删除 ->注意:`数据卷` 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看到的是挂载的 `数据卷`。 +>注意:`数据卷` 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)。 ## 创建一个数据卷 @@ -23,6 +23,7 @@ $ docker volume create my-vol ```bash $ docker volume ls +DRIVER VOLUME NAME local my-vol ``` @@ -46,15 +47,14 @@ $ docker volume inspect my-vol 在用 `docker run` 命令的时候,使用 `--mount` 标记来将 `数据卷` 挂载到容器里。在一次 `docker run` 中可以挂载多个 `数据卷`。 -下面创建一个名为 `web` 的容器,并加载一个 `数据卷` 到容器的 `/webapp` 目录。 +下面创建一个名为 `web` 的容器,并加载一个 `数据卷` 到容器的 `/usr/share/nginx/html` 目录。 ```bash $ docker run -d -P \ --name web \ - # -v my-vol:/wepapp \ - --mount source=my-vol,target=/webapp \ - training/webapp \ - python app.py + # -v my-vol:/usr/share/nginx/html \ + --mount source=my-vol,target=/usr/share/nginx/html \ + nginx:alpine ``` ## 查看数据卷的具体信息 @@ -73,7 +73,7 @@ $ docker inspect web "Type": "volume", "Name": "my-vol", "Source": "/var/lib/docker/volumes/my-vol/_data", - "Destination": "/webapp", + "Destination": "/usr/share/nginx/html", "Driver": "local", "Mode": "", "RW": true, diff --git a/network/port_mapping.md b/network/port_mapping.md index ef42475..022287a 100644 --- a/network/port_mapping.md +++ b/network/port_mapping.md @@ -2,35 +2,33 @@ 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 `-P` 或 `-p` 参数来指定端口映射。 -当使用 `-P` 标记时,Docker 会随机映射一个 `49000~49900` 的端口到内部容器开放的网络端口。 +当使用 `-P` 标记时,Docker 会随机映射一个端口到内部容器开放的网络端口。 -使用 `docker container ls` 可以看到,本地主机的 49155 被映射到了容器的 5000 端口。此时访问本机的 49155 端口即可访问容器内 web 应用提供的界面。 +使用 `docker container ls` 可以看到,本地主机的 32768 被映射到了容器的 80 端口。此时访问本机的 32768 端口即可访问容器内 NGINX 默认页面。 ```bash -$ docker run -d -P training/webapp python app.py +$ docker run -d -P nginx:alpine $ docker container ls -l -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +fae320d08268 nginx:alpine "/docker-entrypoint.…" 24 seconds ago Up 20 seconds 0.0.0.0:32768->80/tcp bold_mcnulty ``` -同样的,可以通过 `docker logs` 命令来查看应用的信息。 +同样的,可以通过 `docker logs` 命令来查看访问记录。 ```bash -$ docker logs -f nostalgic_morse -* Running on http://0.0.0.0:5000/ -10.0.2.2 - - [23/May/2014 20:16:31] "GET / HTTP/1.1" 200 - -10.0.2.2 - - [23/May/2014 20:16:31] "GET /favicon.ico HTTP/1.1" 404 - +$ docker logs fa +172.17.0.1 - - [25/Aug/2020:08:34:04 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0" "-" ``` `-p` 则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有 `ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort`。 ## 映射所有接口地址 -使用 `hostPort:containerPort` 格式本地的 5000 端口映射到容器的 5000 端口,可以执行 +使用 `hostPort:containerPort` 格式本地的 80 端口映射到容器的 80 端口,可以执行 ```bash -$ docker run -d -p 5000:5000 training/webapp python app.py +$ docker run -d -p 80:80 nginx:alpine ``` 此时默认会绑定本地所有接口上的所有地址。 @@ -40,21 +38,21 @@ $ docker run -d -p 5000:5000 training/webapp python app.py 可以使用 `ip:hostPort:containerPort` 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1 ```bash -$ docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py +$ docker run -d -p 127.0.0.1:80:80 nginx:alpine ``` ## 映射到指定地址的任意端口 -使用 `ip::containerPort` 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口。 +使用 `ip::containerPort` 绑定 localhost 的任意端口到容器的 80 端口,本地主机会自动分配一个端口。 ```bash -$ docker run -d -p 127.0.0.1::5000 training/webapp python app.py +$ docker run -d -p 127.0.0.1::80 nginx:alpine ``` 还可以使用 `udp` 标记来指定 `udp` 端口 ```bash -$ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py +$ docker run -d -p 127.0.0.1:80:80/udp nginx:alpine ``` ## 查看映射端口配置 @@ -62,12 +60,12 @@ $ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py 使用 `docker port` 来查看当前映射的端口配置,也可以查看到绑定的地址 ```bash -$ docker port nostalgic_morse 5000 -127.0.0.1:49155. +$ docker port fa 80 +0.0.0.0:32768 ``` 注意: -* 容器有自己的内部网络和 ip 地址(使用 `docker inspect` 可以获取所有的变量,Docker 还可以有一个可变的网络配置。) +* 容器有自己的内部网络和 ip 地址(使用 `docker inspect` 查看,Docker 还可以有一个可变的网络配置。) * `-p` 标记可以多次使用来绑定多个端口 @@ -75,8 +73,7 @@ $ docker port nostalgic_morse 5000 ```bash $ docker run -d \ - -p 5000:5000 \ - -p 3000:80 \ - training/webapp \ - python app.py + -p 80:80 \ + -p 443:443 \ + nginx:alpine ```