LV001-hello-world
一、启动云原生开发
在cnb的云原生开发的基础镜像中已经为我们安装了docker。
1. 创建仓库
W3C/sumu/docker-demo · Cloud Native Build:

我们直接点击云原生开发进入网页版vscode开发页面。
2. docker版本
我们可以直接执行下面的命令查看基础开发环境中docker的版本:
➜ /workspace git:(main) docker --version
Docker version 26.1.3, build b72abbb3. docker info
我们可以通过下面的命令查看docker运行时的一些信息:
docker info【例】
➜ /workspace git:(main) docker info #查看运行时信息
Client:
Version: 26.1.3
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.14.1
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.27.1
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
#...
WARNING: Running in rootless-mode without cgroups. To enable cgroups in rootless-mode, you need to boot the system in cgroup v2 mode.可以简单了解一下,这个client和server都是运行的进程,它们之间通过socket交互,就是下面这个文件:
➜ /workspace git:(main) ls /var/run/docker.sock
/var/run/docker.sock二、开始Hello World
1. docker pull —— 拉取镜像
1.1 命令说明
docker pull 命令用于从 Docker 注册表(例如 Docker Hub)中拉取(下载)镜像到本地。允许用户获取所需的镜像以便在本地运行容器。
docker pull [OPTIONS] NAME[:TAG|@DIGEST]NAME: 镜像名称,通常包含注册表地址,<repo>/<images-name>:<tag>,没有repo的话默认是docker的官方仓库(如docker.io/library/ubuntu)。TAG(可选): 镜像标签,默认为latest,一般是像1.1.0这种版本号之类的。DIGEST(可选): 镜像的 SHA256 摘要。
常用选项:
--all-tags, -a: 下载指定镜像的所有标签。--disable-content-trust: 跳过镜像签名验证。
1.2 使用示例
这里有一个hello world的镜像:hello-world - Official Image | Docker Hub
- (1)拉取默认标签(latest)的镜像
docker pull library/hello-world【例】
➜ /workspace git:(main) docker pull library/hello-world
Using default tag: latest
latest: Pulling from library/hello-world
17eec7bbc9d7: Pull complete
Digest: sha256:54e66cc1dd1fcb1c3c58bd8017914dbed8701e2d8c74d9262e26bd9cc1642d31
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest这会从 Docker Hub 拉取名为 library 组织下的 hello-world 的镜像,标签默认为 latest。
2. docker images —— 列出本地的镜像
2.1 命令说明
通过 docker images 命令,用户可以查看所有已下载或构建的 Docker 镜像的详细信息,如仓库名称、标签、镜像 ID、创建时间和大小。
docker images [OPTIONS] [REPOSITORY[:TAG]]OPTIONS 说明:
-a, --all: 显示所有镜像(包括中间层镜像)。--digests: 显示镜像的摘要信息。-f, --filter: 过滤输出,基于提供的条件。--format: 使用 Go 模板格式化输出。--no-trunc: 显示完整的镜像 ID。-q, --quiet: 只显示镜像 ID。
2.2 使用示例
我们执行下面的命令:
docker images -a【例】
➜ /workspace git:(main) docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 1b44b5a3e06a 2 months ago 10.1kB3. docker run —— 创建并启动一个新的容器
3.1 命令说明
docker run 命令用于创建并启动一个新的容器。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]常用参数说明:
-d: 后台运行容器并返回容器 ID。-it: 交互式运行容器,分配一个伪终端。--name: 给容器指定一个名称。-p: 端口映射,格式为host_port:container_port。-v: 挂载卷,格式为host_dir:container_dir。--rm: 容器停止后自动删除容器。--env或-e: 设置环境变量。--network: 指定容器的网络模式。--restart: 容器的重启策略(如no、on-failure、always、unless-stopped)。-u: 指定用户。
3.2 镜像的格式?
跟所有的技术学习起点一样,上述命令使用 docker 运行一个最简单的 hello-world 容器,它的功能仅仅是在屏幕上打印一些文字。docker run 首先会去本地寻找 hello-world 镜像,如果本地没有,则会从默认的 Docker 镜像仓库中拉去,也就是 Docker Hub。
镜像的格式一般为:
<repository>/<image>:<tag>如果 repository 为空,默认为 Docker Hub, tag 为空,则默认为 latest, 如下是一个 CNB 制品库中的镜像示例, 其中 repository 为 docker.cnb.cool, image 为 looc/git-cnb,tag 为 latest。
docker.cnb.cool/looc/git-cnb:latest镜像分为 public 和 private 两种,对于 public 的镜像无需登录即可拉取,对于 private 的镜像则需要登录后才能拉取,登录命令如下
docker login <repository>具体的登录相关操作后面在60.Docker/60.CNB下的Docker应用/LV020-docker仓库.md中学习。
3.2 使用示例
3.2.1 hello-world
我们执行下面的命令:
docker run library/hello-world【例】
➜ /workspace git:(main) docker run library/hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
17eec7bbc9d7: Pull complete
Digest: sha256:54e66cc1dd1fcb1c3c58bd8017914dbed8701e2d8c74d9262e26bd9cc1642d31
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/这个会优先在本地查找镜像并在前台启动一个容器,若是本地没有镜像的话就会自动从对应的仓库下载。这里是run的library/hello-world所以本地是没有的,所以有一个Unable to find image 'hello-world:latest' locally的提示,我们本地的镜像为hello-world,直接用这个名字的话就会使用本地的了。
3.2.2 交互式运行并分配终端
我们执行下面的命令:
docker run -it ubuntu /bin/bash【例】
➜ /workspace git:(main) docker run -it ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
4b3ffd8ccb52: Pull complete
Digest: sha256:59a458b76b4e8896031cd559576eac7d6cb53a69b38ba819fb26518536368d86
Status: Downloaded newer image for ubuntu:latest
# 这里就进入了ubuntu容器的终端,可以看一下这个系统的一些信息
root@80a60343a1be:/# uname
Linux
root@80a60343a1be:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@80a60343a1be:/# free
total used free shared buff/cache available
Mem: 16777216 3972 16773244 0 0 16773244
Swap: 0 0 0
root@80a60343a1be:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 512G 119M 512G 1% /
tmpfs 64M 0 64M 0% /dev
tmpfs 557G 0 557G 0% /sys/fs/cgroup
shm 64M 0 64M 0% /dev/shm
/dev/md0 20T 9.2T 11T 47% /etc/hosts
overlay 512G 8.0K 512G 1% /usr/local/bin/nproc
tmpfs 557G 0 557G 0% /proc/acpi
tmpfs 557G 0 557G 0% /proc/scsi
tmpfs 557G 0 557G 0% /sys/firmware
root@80a60343a1be:/# cat /proc/version
Linux version 5.4.241-1-tlinux4-0023.2 (mockbuild@VM-81-152-TS3) (gcc version 8.5.0 20210514 (Tencent 8.5.0-26) (GCC)) #1 SMP Mon Jul 14 16:08:26 CST 2025
root@80a60343a1be:/# lsb_release -a
bash: lsb_release: command not found
root@80a60343a1be:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.3 LTS"上面的命令以交互模式运行 ubuntu 容器,并启动一个 Bash shell。可以看到我们的容器是ubuntu24.04系统。那怎么退出呢?我们直接在这个终端执行exit就会退出当前容器的终端:
root@80a60343a1be:/# exit
exit
➜ /workspace git:(main) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
➜ /workspace git:(main) docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80a60343a1be ubuntu "/bin/bash" 6 minutes ago Exited (0) About a minute ago zen_gagarin
ed2a73b41087 1b44b5a3e06a "/hello" 16 minutes ago Exited (0) 16 minutes ago vigorous_agnesi
1a4ae385d925 1b44b5a3e06a "/hello" 18 minutes ago Exited (0) 18 minutes ago tender_archimedes退出后这个容器就会停止运行。
3.2.3 后台运行容器
那能不能把容器放在后台?有一些只是服务,需要常驻后台,有的,当然有的,我们使用 -d命令就可以把容器放在后台运行了。我们执行下面的命令:
docker run -it -d ubuntu
docker ps【例】
➜ /workspace git:(main) docker run -it -d ubuntu
a81596c36f3a907f188b5412b6515592b082b3d9d4c0627496706bd8563244a4
➜ /workspace git:(main) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a81596c36f3a ubuntu "/bin/bash" 7 seconds ago Up 6 seconds interesting_dewdney这个时候就会在后台运行 ubuntu 容器并返回容器 ID。那怎么进入这个容器?执行下面的命令:
docker ps
docker exec -it <CONTAINER ID> /bin/bash【例】
➜ /workspace git:(main) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a81596c36f3a ubuntu "/bin/bash" 4 minutes ago Up 4 minutes interesting_dewdney
➜ /workspace git:(main) docker exec -it a81596c36f3a /bin/bash
root@a81596c36f3a:/#这样就可以重新进入容器的终端了。这个时候输入 exit ,依然可以退出当前容器,但是还是会在后台运行。
3.3.4 指定容器名称
可以通过 --name 来为容器定义一个名称:
docker run -it --name my_container ubuntu:20.04
docker ps【例】
➜ /workspace git:(main) docker run -it --name my_container ubuntu:20.04
root@aabc25e1aaa7:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.6 LTS"
root@aabc25e1aaa7:/#
root@aabc25e1aaa7:/# exit
exit
➜ /workspace git:(main)
➜ /workspace git:(main) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a81596c36f3a ubuntu "/bin/bash" 24 minutes ago Up 7 minutes interesting_dewdney
➜ /workspace git:(main) docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aabc25e1aaa7 ubuntu:20.04 "/bin/bash" 51 seconds ago Exited (0) 14 seconds ago my_container
a81596c36f3a ubuntu "/bin/bash" 24 minutes ago Up 7 minutes interesting_dewdney运行一个 ubuntu 容器,并将其命名为 my_container,可以看到 aabc25e1aaa7 这个容器的NAME被设置为了 my_container 。
3.3.5 端口映射
docker run -p 8080:80 nginx将本地主机的 8080 端口映射到容器内的 80 端口,运行 nginx 容器。
3.3.6 挂载卷
docker run -v /host/data:/container/data ubuntu将主机的 /host/data 目录挂载到容器内的 /container/data 目录。
3.3.7 设置环境变量
docker run -e MY_ENV_VAR=my_value ubuntu设置环境变量 MY_ENV_VAR 的值为 my_value,运行 ubuntu 容器。
4. docker ps —— 列出容器
4.1 命令说明
默认情况下,docker ps 命令只显示运行中的容器,但也可以通过指定选项来显示所有容器,包括停止的容器。
docker ps [OPTIONS]OPTIONS说明:
-a, --all: 显示所有容器,包括停止的容器。-q, --quiet: 只显示容器 ID。-l, --latest: 显示最近创建的一个容器,包括所有状态。-n: 显示最近创建的 n 个容器,包括所有状态。--no-trunc: 不截断输出。-s, --size: 显示容器的大小。--filter, -f: 根据条件过滤显示的容器。--format: 格式化输出。
4.2 使用示例
4.2.1 列出所有在运行的容器信息
默认情况下,docker ps 只显示正在运行的容器。
docker ps【例】
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
09b93464c2f7 nginx:latest "nginx -g 'daemon off" ... 80/tcp, 443/tcp myrunoob
96f7f14e99ab mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp mymysqlCONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。状态有7种:created(已创建)、restarting(重启中)、running(运行中)、removing(迁移中)、paused(暂停)、exited(停止)、dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
4.2.2 列出所有容器,包括停止的容器
docker ps -a显示所有容器,包括停止的容器。
5. docker exec —— 执行命令
当我们执行docker run -d -it命令后,会启动一个容器并放置在后台,而我们依然会处于宿主机,那么怎么进入容器的终端呢?
5.1 命令说明
ocker exec 命令用于在运行中的容器内执行一个新的命令。这对于调试、运行附加的进程或在容器内部进行管理操作非常有用。
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]CONTAINER是容器名,也可以是容器的ID。COMMAND就是要执行的命令。
常用参数:
-d, --detach: 在后台运行命令。--detach-keys: 覆盖分离容器的键序列。-e, --env: 设置环境变量。--env-file: 从文件中读取环境变量。-i, --interactive: 保持标准输入打开。--privileged: 给这个命令额外的权限。--user, -u: 以指定用户的身份运行命令。--workdir, -w: 指定命令的工作目录。-t, --tty: 分配一个伪终端。
5.2 使用示例
5.2.1 在容器内运行命令
可以通过exex直接在容器内运行命令:
docker exec <CONTAINER ID> ls -l【例】
➜ /workspace git:(main) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a81596c36f3a ubuntu "/bin/bash" 4 minutes ago Up 4 minutes interesting_dewdney
➜ /workspace git:(main) docker exec a81596c36f3a ls -l
total 0
lrwxrwxrwx 1 root root 7 Apr 22 2024 bin -> usr/bin
drwxr-xr-x 2 root root 10 Apr 22 2024 boot
drwxr-xr-x 5 root root 360 Oct 12 02:07 dev
drwxr-xr-x 1 root root 86 Oct 12 02:07 etc
drwxr-xr-x 3 root root 28 Oct 1 02:10 home
lrwxrwxrwx 1 root root 7 Apr 22 2024 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Apr 22 2024 lib64 -> usr/lib64
drwxr-xr-x 2 root root 10 Oct 1 02:03 media
drwxr-xr-x 2 root root 10 Oct 1 02:03 mnt
drwxr-xr-x 2 root root 10 Oct 1 02:03 opt
dr-xr-xr-x 7440 root root 0 Oct 12 02:07 proc
drwx------ 2 root root 49 Oct 1 02:09 root
drwxr-xr-x 4 root root 45 Oct 1 02:10 run
lrwxrwxrwx 1 root root 8 Apr 22 2024 sbin -> usr/sbin
drwxr-xr-x 2 root root 10 Oct 1 02:03 srv
dr-xr-xr-x 12 root root 0 Sep 24 05:37 sys
drwxrwxrwt 2 root root 10 Oct 1 02:09 tmp
drwxr-xr-x 1 root root 27 Oct 1 02:03 usr
drwxr-xr-x 11 root root 187 Oct 1 02:09 var5.2.2 以交互模式运行命令
可以用下面的命令进入后台运行的容器的终端:
docker exec -it <CONTAINER ID> /bin/bash【例】
➜ /workspace git:(main) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a81596c36f3a ubuntu "/bin/bash" 4 minutes ago Up 4 minutes interesting_dewdney
➜ /workspace git:(main) docker exec -it a81596c36f3a /bin/bash
root@a81596c36f3a:/#
root@a81596c36f3a:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var6. docker start/stop/restart
6.1 命令说明
6.1.1 docker start
docker start 命令用于启动一个或多个已经创建的容器。
docker start [OPTIONS] CONTAINER [CONTAINER...]参数
-a: 附加到容器的标准输入输出流。-i: 附加并保持标准输入打开。
6.1.2 docker stop
docker stop 命令用于停止一个或多个已经创建的容器。
docker stop [OPTIONS] CONTAINER [CONTAINER...]参数
-t, --time: 停止容器之前等待的秒数,默认是 10 秒。
6.1.3 docker restart
docker restart 命令用于重启一个或多个已经创建的容器。
docker restart [OPTIONS] CONTAINER [CONTAINER...]参数
-t, --time: 重启容器之前等待的秒数,默认是 10 秒。
6.2 使用示例
docker restart <CONTAINER ID> # 重启一个容器
docker stop <CONTAINER ID> # 停止一个容器
docker start <CONTAINER ID> # 启动一个容器【例】
有如下在后台运行的容器:
➜ /workspace git:(main) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a81596c36f3a ubuntu "/bin/bash" 7 minutes ago Up 7 minutes interesting_dewdney我们尝试下这三个命令,它们都会返回这个容器的id:
➜ /workspace git:(main) docker restart a81596c36f3a # 重启一个容器
a81596c36f3a
➜ /workspace git:(main) docker stop a81596c36f3a # 停止一个容器
a81596c36f3a
➜ /workspace git:(main) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
➜ /workspace git:(main)
➜ /workspace git:(main) docker start a81596c36f3a
a81596c36f3a
➜ /workspace git:(main) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a81596c36f3a ubuntu "/bin/bash" 16 minutes ago Up 3 seconds interesting_dewdney7. docker rm/rmi
7.1 命令说明
7.1.1 docker rm
docker rm 命令用于删除一个或多个已经停止的容器。它不会删除正在运行的容器,如果需要先停止容器,可以使用 docker stop 命令。
docker rm [OPTIONS] CONTAINER [CONTAINER...]参数说明
CONTAINER [CONTAINER...]: 一个或多个要删除的容器的名称或 ID。
OPTIONS:
-f,--force: 强制删除正在运行的容器(使用SIGKILL信号)。-l,--link: 删除指定的连接,而不是容器本身。-v,--volumes: 删除容器挂载的卷。
7.1.2 docker rmi
docker rmi 命令对于管理本地存储的镜像非常有用,帮助用户清理不再需要的镜像,释放存储空间。
docker rmi [OPTIONS] IMAGE [IMAGE...]参数说明:
IMAGE: 要删除的镜像的名称或 ID。可以是镜像名、镜像 ID 或镜像摘要。OPTIONS: 可选参数,用来控制命令的行为。
OPTIONS:
-a,--all-tags: 指定仓库名称时,删除该仓库下的所有镜像。-f,--force: 强制删除镜像,即使该镜像被容器使用。--help: 打印帮助信息并退出。--no-prune: 不删除悬空的父镜像。-q,--quiet: 安静模式,不显示删除镜像的详细信息。
7.2 使用示例
7.2.1 删除镜像
通过下面的命令删除镜像:
docker images -a # 查看当前宿主机中所有镜像
docker rmi <IMAGE ID> # 删除指定的镜像【例】
➜ /workspace git:(main) docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 1b44b5a3e06a 2 months ago 10.1kB
➜ /workspace git:(main) docker rmi 1b44b5a3e06a
Untagged: hello-world:latest
Untagged: hello-world@sha256:54e66cc1dd1fcb1c3c58bd8017914dbed8701e2d8c74d9262e26bd9cc1642d31
Deleted: sha256:1b44b5a3e06a9aae883e7bf25e45c100be0bb81a0e01b32de604f3ac44711634
Deleted: sha256:53d204b3dc5ddbc129df4ce71996b8168711e211274c785de5e0d4eb68ec3851
➜ /workspace git:(main) docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE像这种情况就是镜像被容器使用了,虽然容器不在运行,但是还是没法删掉:
➜ /workspace git:(main) docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container 1a4ae385d925 is using its referenced image 1b44b5a3e06a这个时候加上 -f参数就可以了,直接强制删除即可。
7.2.2 删除已停止的容器
在我们执行了exit后,容器会变成Exited (退出状态),对应的进程会变成僵尸进程 (Zombie) ,并不会释放资源,我们可以通过rm命令删除容器,进而释放进程资源。
docker rm <CONTAINER ID1> <CONTAINER ID2> ...【例】
➜ /workspace git:(main) docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a81596c36f3a ubuntu "/bin/bash" 19 minutes ago Up 3 minutes interesting_dewdney
80a60343a1be ubuntu "/bin/bash" 27 minutes ago Exited (0) 23 minutes ago zen_gagarin
ed2a73b41087 1b44b5a3e06a "/hello" 37 minutes ago Exited (0) 37 minutes ago vigorous_agnesi
1a4ae385d925 1b44b5a3e06a "/hello" 39 minutes ago Exited (0) 39 minutes ago tender_archimedes
➜ /workspace git:(main) docker rm 80a60343a1be ed2a73b41087 1a4ae385d925
80a60343a1be
ed2a73b41087
1a4ae385d925
➜ /workspace git:(main) docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a81596c36f3a ubuntu "/bin/bash" 20 minutes ago Up 3 minutes interesting_dewdney8. docker inspect
8.1 命令说明
docker inspect 命令用于获取 Docker 对象(容器、镜像、卷、网络等)的详细信息。它将返回 JSON 格式的详细信息,可以帮助用户了解对象的配置和状态。
docker inspect [OPTIONS] NAME|ID [NAME|ID...]OPTIONS:
-f, --format: 使用 Go 模板语法格式化输出。--type: 返回指定类型的对象信息(可选类型:container、image、network、volume)。
8.2 使用示例
后面学习过程中会慢慢接触的。
8.2.1 获取容器默认命令
docker run 命令默认使用镜像中的 Cmd 作为容器的启动命令,Cmd 可通过如下命令来查看。
docker inspect images_name --format='{{.Config.Cmd}}'我们用hello-world试一下:
➜ /workspace git:(main) docker inspect hello-world --format='{{.Config.Cmd}}'
[/hello]可以看到,这个镜像会使用/hello命令,所以其实下面的命令是等效的:
docker run -it hello-world # 等效于 docker run -it hello-world /hello, 使用 -it 参数启动容器进入交互式终端三、Alpine Linux
1. Alpine Linux简介
Alpine Linux是一款开源社区开发的、基于musl libc和BusyBox的轻量级Linux发行版;适合用来做路由器、防火墙、VPNs、VoIP 盒子以及服务器的操作系统。
Alpine 的意思是“高山的”。它围绕 musl libc 和 busybox 构建。这使得它比传统的 GNU/Linux 发行版更小,更节省资源。通过它创建的一个容器只需不超过 8 MB 的空间。而在磁盘中的最小安装仅要大约 130 MB 的存储空间。
Alpine Linux 是一个非常简洁的发行版。它使用自己的包管理器 apk、OpenRC init 系统、脚本驱动的设置,仅此而已!这为我们提供了一个简洁、清晰的 Linux 环境,没有多余的干扰。然后,我们可以在此基础上添加项目所需的软件包,因此无论是构建家庭 PVR、iSCSI 存储控制器、超薄邮件服务器容器还是坚如磐石的嵌入式交换机,都不会有其他东西妨碍我们。
2. 运行Alpine
我们把这个镜像拉下来看一下:
➜ /workspace git:(main) docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
Digest: sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412
Status: Image is up to date for alpine:latest
docker.io/library/alpine:latest
➜ /workspace git:(main) docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 706db57fb206 2 weeks ago 8.32MB
hello-world latest 1b44b5a3e06a 2 months ago 10.1kB会发现它的镜像只有8.32MB。我们进入交互式终端看一下:
docker run -it alpine
可以看到他也是支持了不少的命令的。我们可以看一下这个系统的一些信息:
/ # uname -a
Linux 56b5a4c6b2ab 5.4.241-1-tlinux4-0023.1 #1 SMP Tue May 6 19:24:58 CST 2025 x86_64 Linux
/ # cat /etc/issue
Welcome to Alpine Linux 3.22
Kernel \r on \m (\l)3. apk工具
在Alpine中,是使用apk作为包管理工具,我们可以用以下命令安装相关命令:
apk add gcc make