mirror of
https://github.com/yeasy/docker_practice.git
synced 2024-12-24 22:18:54 +00:00
Update ubuntu version to 18.04
Signed-off-by: khs1994 <khs1994@khs1994.com>
This commit is contained in:
parent
6f12336f33
commit
2cc1207dc3
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -2,4 +2,4 @@
|
||||
|
||||
*.sh text eol=lf
|
||||
|
||||
secrets/* text eol=lf
|
||||
*.py linguist-language=go
|
||||
|
8
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
8
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
@ -23,11 +23,11 @@ about: Create a report to help us improve
|
||||
* [x] Others (Pls describe below)
|
||||
|
||||
### Docker Version
|
||||
<!--如果你的 Docker 版本低于 18.06 请尽可能升级到该版本,保留你的 Docker 版本,其他选项删除-->
|
||||
<!--if Docker version under 18.06, please upgrade Docker to 18.06-->
|
||||
<!--如果你的 Docker 版本低于 18.09 请尽可能升级到该版本,保留你的 Docker 版本,其他选项删除-->
|
||||
<!--if Docker version under 18.09, please upgrade Docker to 18.09-->
|
||||
|
||||
* [x] Edge (v18.06)
|
||||
* [x] Stable (v18.06)
|
||||
* [x] Edge (v18.09)
|
||||
* [x] Stable (v18.09)
|
||||
* [x] 1.13.0 or Before
|
||||
|
||||
### Problem Description
|
||||
|
8
.github/ISSUE_TEMPLATE/Custom.md
vendored
8
.github/ISSUE_TEMPLATE/Custom.md
vendored
@ -23,11 +23,11 @@ about: Create a issue about Docker
|
||||
* [x] Others (Pls describe below)
|
||||
|
||||
### Docker Version
|
||||
<!--如果你的 Docker 版本低于 18.06 请尽可能升级到该版本,保留你的 Docker 版本,其他选项删除-->
|
||||
<!--if Docker version under 18.06, please upgrade Docker to 18.06-->
|
||||
<!--如果你的 Docker 版本低于 18.09 请尽可能升级到该版本,保留你的 Docker 版本,其他选项删除-->
|
||||
<!--if Docker version under 18.09, please upgrade Docker to 18.09-->
|
||||
|
||||
* [x] Edge (v18.06)
|
||||
* [x] Stable (v18.06)
|
||||
* [x] Edge (v18.09)
|
||||
* [x] Stable (v18.09)
|
||||
* [x] 1.13.0 or Before
|
||||
|
||||
### Problem Description
|
||||
|
@ -55,8 +55,6 @@ Docker 自身仍在快速发展中,生态环境也在蓬勃成长。建议初
|
||||
|
||||
## 鼓励项目
|
||||
|
||||
欢迎鼓励项目一杯 coffee~
|
||||
|
||||
<p align="center">
|
||||
<img width="200" src="https://github.com/yeasy/docker_practice/raw/master/_images/donate.jpeg">
|
||||
</p>
|
||||
|
@ -88,7 +88,7 @@
|
||||
* [创建 Swarm 集群](swarm_mode/create.md)
|
||||
* [部署服务](swarm_mode/deploy.md)
|
||||
* [使用 compose 文件](swarm_mode/stack.md)
|
||||
* [管理敏感数据](swarm_mode/secret.md)
|
||||
* [管理密钥](swarm_mode/secret.md)
|
||||
* [管理配置信息](swarm_mode/config.md)
|
||||
* [滚动升级](swarm_mode/rolling_update.md)
|
||||
* [安全](security/README.md)
|
||||
@ -104,7 +104,7 @@
|
||||
* [控制组](underly/cgroups.md)
|
||||
* [联合文件系统](underly/ufs.md)
|
||||
* [容器格式](underly/container_format.md)
|
||||
* [网络](underly/network.md)
|
||||
* [网络](underly/network.md)
|
||||
* [Etcd 项目](etcd/README.md)
|
||||
* [简介](etcd/intro.md)
|
||||
* [安装](etcd/install.md)
|
||||
@ -143,7 +143,7 @@
|
||||
* [实战案例-CI/CD](cases/ci/README.md)
|
||||
* [Drone](cases/ci/drone.md)
|
||||
* [Docker 开源项目](opensource/README.md)
|
||||
* [LinuxKit](opensource/linuxkit.md)
|
||||
* [LinuxKit](opensource/linuxkit.md)
|
||||
* [附录](appendix/README.md)
|
||||
* [附录一:常见问题总结](appendix/faq/README.md)
|
||||
* [附录二:热门镜像介绍](appendix/repo/README.md)
|
||||
|
@ -11,7 +11,7 @@
|
||||
默认会启动一个最小化的 Ubuntu 环境。
|
||||
|
||||
```bash
|
||||
$ docker run --name some-ubuntu -it ubuntu:17.10
|
||||
$ docker run --name some-ubuntu -it ubuntu:18.04
|
||||
root@523c70904d54:/#
|
||||
```
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
## Docker 镜像
|
||||
|
||||
我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 `root` 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 `root` 文件系统。比如官方镜像 `ubuntu:16.04` 就包含了完整的一套 Ubuntu 16.04 最小系统的 `root` 文件系统。
|
||||
我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 `root` 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 `root` 文件系统。比如官方镜像 `ubuntu:18.04` 就包含了完整的一套 Ubuntu 18.04 最小系统的 `root` 文件系统。
|
||||
|
||||
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 `<仓库名>:<标签>` 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 `latest` 作为默认标签。
|
||||
|
||||
以 [Ubuntu 镜像](https://store.docker.com/images/ubuntu) 为例,`ubuntu` 是仓库的名字,其内包含有不同的版本标签,如,`14.04`, `16.04`。我们可以通过 `ubuntu:14.04`,或者 `ubuntu:16.04` 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 `ubuntu`,那将视为 `ubuntu:latest`。
|
||||
以 [Ubuntu 镜像](https://store.docker.com/images/ubuntu) 为例,`ubuntu` 是仓库的名字,其内包含有不同的版本标签,如,`16.04`, `18.04`。我们可以通过 `ubuntu:14.04`,或者 `ubuntu:18.04` 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 `ubuntu`,那将视为 `ubuntu:latest`。
|
||||
|
||||
仓库名经常以 *两段式路径* 形式出现,比如 `jwilder/nginx-proxy`,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体 Docker Registry 的软件或服务。
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
如果不使用 `-d` 参数运行容器。
|
||||
|
||||
```bash
|
||||
$ docker run ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
|
||||
$ docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
|
||||
hello world
|
||||
hello world
|
||||
hello world
|
||||
@ -19,7 +19,7 @@ hello world
|
||||
如果使用了 `-d` 参数运行容器。
|
||||
|
||||
```bash
|
||||
$ docker run -d ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
|
||||
$ docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
|
||||
77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a
|
||||
```
|
||||
|
||||
@ -32,7 +32,7 @@ $ docker run -d ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep
|
||||
```
|
||||
$ docker container ls
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
77b2dc01fe0f ubuntu:17.10 /bin/sh -c 'while tr 2 minutes ago Up 1 minute agitated_wright
|
||||
77b2dc01fe0f ubuntu:18.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute agitated_wright
|
||||
```
|
||||
|
||||
要获取容器的输出信息,可以通过 `docker container logs` 命令。
|
||||
|
@ -64,7 +64,7 @@ $ docker inspect web
|
||||
$ docker run --rm -it \
|
||||
# -v $HOME/.bash_history:/root/.bash_history \
|
||||
--mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history \
|
||||
ubuntu:17.10 \
|
||||
ubuntu:18.04 \
|
||||
bash
|
||||
|
||||
root@2affd44b4667:/# history
|
||||
|
@ -17,7 +17,7 @@
|
||||
假设我们需要一个得知自己当前公网 IP 的镜像,那么可以先用 `CMD` 来实现:
|
||||
|
||||
```Dockerfile
|
||||
FROM ubuntu:16.04
|
||||
FROM ubuntu:18.04
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y curl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
@ -49,7 +49,7 @@ $ docker run myip curl -s http://ip.cn -i
|
||||
这显然不是很好的解决方案,而使用 `ENTRYPOINT` 就可以解决这个问题。现在我们重新用 `ENTRYPOINT` 来实现这个镜像:
|
||||
|
||||
```Dockerfile
|
||||
FROM ubuntu:16.04
|
||||
FROM ubuntu:18.04
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y curl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
@ -9,18 +9,18 @@ redis latest 5f515359c7f8 5 days ago
|
||||
nginx latest 05a60462f8ba 5 days ago 181 MB
|
||||
mongo 3.2 fe9198c04d62 5 days ago 342 MB
|
||||
<none> <none> 00285df0df87 5 days ago 342 MB
|
||||
ubuntu 16.04 f753707788c5 4 weeks ago 127 MB
|
||||
ubuntu 18.04 f753707788c5 4 weeks ago 127 MB
|
||||
ubuntu latest f753707788c5 4 weeks ago 127 MB
|
||||
ubuntu 14.04 1e0c3dd64ccd 4 weeks ago 188 MB
|
||||
```
|
||||
|
||||
列表包含了 `仓库名`、`标签`、`镜像 ID`、`创建时间` 以及 `所占用的空间`。
|
||||
|
||||
其中仓库名、标签在之前的基础概念章节已经介绍过了。**镜像 ID** 则是镜像的唯一标识,一个镜像可以对应多个**标签**。因此,在上面的例子中,我们可以看到 `ubuntu:16.04` 和 `ubuntu:latest` 拥有相同的 ID,因为它们对应的是同一个镜像。
|
||||
其中仓库名、标签在之前的基础概念章节已经介绍过了。**镜像 ID** 则是镜像的唯一标识,一个镜像可以对应多个**标签**。因此,在上面的例子中,我们可以看到 `ubuntu:18.04` 和 `ubuntu:latest` 拥有相同的 ID,因为它们对应的是同一个镜像。
|
||||
|
||||
### 镜像体积
|
||||
|
||||
如果仔细观察,会注意到,这里标识的所占用空间和在 Docker Hub 上看到的镜像大小不同。比如,`ubuntu:16.04` 镜像大小,在这里是 `127 MB`,但是在 [Docker Hub](https://hub.docker.com/r/library/ubuntu/tags/) 显示的却是 `50 MB`。这是因为 Docker Hub 中显示的体积是压缩后的体积。在镜像下载和上传过程中镜像是保持着压缩状态的,因此 Docker Hub 所显示的大小是网络传输中更关心的流量大小。而 `docker image ls` 显示的是镜像下载到本地后,展开的大小,准确说,是展开后的各层所占空间的总和,因为镜像到本地后,查看空间的时候,更关心的是本地磁盘空间占用的大小。
|
||||
如果仔细观察,会注意到,这里标识的所占用空间和在 Docker Hub 上看到的镜像大小不同。比如,`ubuntu:18.04` 镜像大小,在这里是 `127 MB`,但是在 [Docker Hub](https://hub.docker.com/r/library/ubuntu/tags/) 显示的却是 `50 MB`。这是因为 Docker Hub 中显示的体积是压缩后的体积。在镜像下载和上传过程中镜像是保持着压缩状态的,因此 Docker Hub 所显示的大小是网络传输中更关心的流量大小。而 `docker image ls` 显示的是镜像下载到本地后,展开的大小,准确说,是展开后的各层所占空间的总和,因为镜像到本地后,查看空间的时候,更关心的是本地磁盘空间占用的大小。
|
||||
|
||||
另外一个需要注意的问题是,`docker image ls` 列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于 Docker 使用 Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多。
|
||||
|
||||
@ -77,7 +77,7 @@ $ docker image ls -a
|
||||
```bash
|
||||
$ docker image ls ubuntu
|
||||
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||
ubuntu 16.04 f753707788c5 4 weeks ago 127 MB
|
||||
ubuntu 18.04 f753707788c5 4 weeks ago 127 MB
|
||||
ubuntu latest f753707788c5 4 weeks ago 127 MB
|
||||
ubuntu 14.04 1e0c3dd64ccd 4 weeks ago 188 MB
|
||||
```
|
||||
@ -85,9 +85,9 @@ ubuntu 14.04 1e0c3dd64ccd 4 weeks ago
|
||||
列出特定的某个镜像,也就是说指定仓库名和标签
|
||||
|
||||
```bash
|
||||
$ docker image ls ubuntu:16.04
|
||||
$ docker image ls ubuntu:18.04
|
||||
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||
ubuntu 16.04 f753707788c5 4 weeks ago 127 MB
|
||||
ubuntu 18.04 f753707788c5 4 weeks ago 127 MB
|
||||
```
|
||||
|
||||
除此以外,`docker image ls` 还支持强大的过滤器参数 `--filter`,或者简写 `-f`。之前我们已经看到了使用过滤器来列出虚悬镜像的用法,它还有更多的用法。比如,我们希望看到在 `mongo:3.2` 之后建立的镜像,可以用下面的命令:
|
||||
@ -149,7 +149,7 @@ IMAGE ID REPOSITORY TAG
|
||||
05a60462f8ba nginx latest
|
||||
fe9198c04d62 mongo 3.2
|
||||
00285df0df87 <none> <none>
|
||||
f753707788c5 ubuntu 16.04
|
||||
f753707788c5 ubuntu 18.04
|
||||
f753707788c5 ubuntu latest
|
||||
1e0c3dd64ccd ubuntu 14.04
|
||||
```
|
||||
|
@ -16,18 +16,18 @@ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
|
||||
比如:
|
||||
|
||||
```bash
|
||||
$ docker pull ubuntu:16.04
|
||||
16.04: Pulling from library/ubuntu
|
||||
$ docker pull ubuntu:18.04
|
||||
18.04: Pulling from library/ubuntu
|
||||
bf5d46315322: Pull complete
|
||||
9f13e0ac480c: Pull complete
|
||||
e8988b5b3097: Pull complete
|
||||
40af181810e7: Pull complete
|
||||
e6f7c7e5c03e: Pull complete
|
||||
Digest: sha256:147913621d9cdea08853f6ba9116c2e27a3ceffecf3b492983ae97c3d643fbbe
|
||||
Status: Downloaded newer image for ubuntu:16.04
|
||||
Status: Downloaded newer image for ubuntu:18.04
|
||||
```
|
||||
|
||||
上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。而镜像名称是 `ubuntu:16.04`,因此将会获取官方镜像 `library/ubuntu` 仓库中标签为 `16.04` 的镜像。
|
||||
上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。而镜像名称是 `ubuntu:18.04`,因此将会获取官方镜像 `library/ubuntu` 仓库中标签为 `18.04` 的镜像。
|
||||
|
||||
从下载过程中可以看到我们之前提及的分层存储的概念,镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的 ID 的前 12 位。并且下载结束后,给出该镜像完整的 `sha256` 的摘要,以确保下载一致性。
|
||||
|
||||
@ -37,32 +37,35 @@ Status: Downloaded newer image for ubuntu:16.04
|
||||
|
||||
### 运行
|
||||
|
||||
有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。以上面的 `ubuntu:16.04` 为例,如果我们打算启动里面的 `bash` 并且进行交互式操作的话,可以执行下面的命令。
|
||||
有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。以上面的 `ubuntu:18.04` 为例,如果我们打算启动里面的 `bash` 并且进行交互式操作的话,可以执行下面的命令。
|
||||
|
||||
```bash
|
||||
$ docker run -it --rm \
|
||||
ubuntu:16.04 \
|
||||
ubuntu:18.04 \
|
||||
bash
|
||||
|
||||
root@e7009c6ce357:/# cat /etc/os-release
|
||||
NAME="Ubuntu"
|
||||
VERSION="16.04.4 LTS, Trusty Tahr"
|
||||
VERSION="18.04.1 LTS (Bionic Beaver)"
|
||||
ID=ubuntu
|
||||
ID_LIKE=debian
|
||||
PRETTY_NAME="Ubuntu 16.04.4 LTS"
|
||||
VERSION_ID="16.04"
|
||||
HOME_URL="http://www.ubuntu.com/"
|
||||
SUPPORT_URL="http://help.ubuntu.com/"
|
||||
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
|
||||
PRETTY_NAME="Ubuntu 18.04.1 LTS"
|
||||
VERSION_ID="18.04"
|
||||
HOME_URL="https://www.ubuntu.com/"
|
||||
SUPPORT_URL="https://help.ubuntu.com/"
|
||||
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
|
||||
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
|
||||
VERSION_CODENAME=bionic
|
||||
UBUNTU_CODENAME=bionic
|
||||
```
|
||||
|
||||
`docker run` 就是运行容器的命令,具体格式我们会在 [容器](../container) 一节进行详细讲解,我们这里简要的说明一下上面用到的参数。
|
||||
|
||||
* `-it`:这是两个参数,一个是 `-i`:交互式操作,一个是 `-t` 终端。我们这里打算进入 `bash` 执行一些命令并查看返回结果,因此我们需要交互式终端。
|
||||
* `--rm`:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 `docker rm`。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 `--rm` 可以避免浪费空间。
|
||||
* `ubuntu:16.04`:这是指用 `ubuntu:16.04` 镜像为基础来启动容器。
|
||||
* `ubuntu:18.04`:这是指用 `ubuntu:18.04` 镜像为基础来启动容器。
|
||||
* `bash`:放在镜像名后的是**命令**,这里我们希望有个交互式 Shell,因此用的是 `bash`。
|
||||
|
||||
进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。这里,我们执行了 `cat /etc/os-release`,这是 Linux 常用的查看当前系统版本的命令,从返回的结果可以看到容器内是 `Ubuntu 16.04.4 LTS` 系统。
|
||||
进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。这里,我们执行了 `cat /etc/os-release`,这是 Linux 常用的查看当前系统版本的命令,从返回的结果可以看到容器内是 `Ubuntu 18.04.1 LTS` 系统。
|
||||
|
||||
最后我们通过 `exit` 退出了这个容器。
|
||||
|
@ -58,15 +58,15 @@ Pulling repository centos
|
||||
以下命令中的 `username` 请替换为你的 Docker 账号用户名。
|
||||
|
||||
```bash
|
||||
$ docker tag ubuntu:17.10 username/ubuntu:17.10
|
||||
$ docker tag ubuntu:18.04 username/ubuntu:18.04
|
||||
|
||||
$ docker image ls
|
||||
|
||||
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||
ubuntu 17.10 275d79972a86 6 days ago 94.6MB
|
||||
username/ubuntu 17.10 275d79972a86 6 days ago 94.6MB
|
||||
ubuntu 18.04 275d79972a86 6 days ago 94.6MB
|
||||
username/ubuntu 18.04 275d79972a86 6 days ago 94.6MB
|
||||
|
||||
$ docker push username/ubuntu:17.10
|
||||
$ docker push username/ubuntu:18.04
|
||||
|
||||
$ docker search username
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user