Docker Usage

Docker Usage

docker主要分成images和container,images可以理解成系统的源文件,container就像是把源文件实例化成系统。把images启动成container那我们就相当于得到了可以操作的系统。

Docker image

docker images 可以查看已经下载下来的镜像:

1
2
3
4
> docker images   
REPOSITORY TAG IMAGE ID CREATED SIZE
neo4j latest f9fb4836fab8 8 days ago 494MB
ubuntu 22.04 c6b84b685f35 6 weeks ago 77.8MB

列表包含了 仓库名标签镜像 ID创建时间 以及 所占用的空间

我们可以使用 docker pull image_name:tag 来拉去我们需要的Docker镜像,(请将 image_name:tag 替换为你要拉取的实际镜像名称和标签):

1
docker pull ubuntu:18.04

Docker container

在有了镜像之后,我们需要使用 docker run 命令把镜像作为基础启动并运行一个容器:

1
docker run --it ubuntu:18.04 /bin/bash

-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。

ubuntu:18.04:这是指用 ubuntu:18.04 镜像为基础来启动容器。

bin/bash:放在镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的是 bash

执行该命令docker会分配一个虚拟终端并绑定到容器的标准输入输出。切记:我们只需要创建一次container,如果退出了container终端,我们可以使用 docker exec 来再次启动,不用反复使用 docker run ,因为 docker run 每执行一次都会创建一个新的container。

docker start CONTAINER ID 可以启动一个正在运行container,相反的docker stop CONTAINER ID 可以停止一个正在运行container,CONTAINER ID 可以通过 docker ps -a 来查看:

1
2
3
4
> docker ps -a 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc807980a0c2 sagikazarmark/dvwa "/run.sh" 19 hours ago Up 43 minutes 3306/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp dvwa
d17bdede58fe ubuntu:22.04 "/bin/bash" 44 hours ago Exited (137) About an hour ago janusgraph

Share path

使用 docker run 命令来创建和运行容器。如果你需要将本地文件与容器中的文件关联,可以使用 -v--volume 选项来实现。语法如下:

1
docker run -v /path/to/local/directory:/container/path -it image_name:tag

Access container

某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令,推荐大家使用 docker exec 命令,原因会在下面说明。

attach 命令

下面示例如何使用 docker attach 命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ docker run -dit ubuntu

243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550

$ docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

243c32535da7 ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds nostalgic_hypatia

$ docker attach 243c

root@243c32535da7:/#

注意: 如果从这个 stdin 中 exit,会导致容器的停止。

exec 命令

-i -t 参数

docker exec 后边可以跟多个参数,这里主要说明 -i -t 参数。

只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。

-i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ docker run -dit ubuntu

69d137adef7a8a689cbcb059e94da5489d3cddd240ff675c640c8d96e84fe1f6

$ docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

69d137adef7a ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds zealous_swirles

$ docker exec -i 69d1 bash

ls

bin

boot

dev

...

$ docker exec -it 69d1 bash

root@69d137adef7a:/#

如果从这个 stdin 中 exit,不会导致容器的停止。这就是为什么推荐大家使用 docker exec 的原因。

Make image

要将 Docker 容器打包成镜像,可以使用 docker commit 命令。这个命令会将容器的当前状态保存为一个新的镜像。下面是一个简单的步骤:
使用docker commit container_id new_image_name命令将容器保存为新的镜像,其中 container_id 是你要保存的容器的 ID,new_image_name 是你想要为新镜像指定的名称和标签:

1
docker commit 123456789abc my_new_image:1.0

完成后,你可以使用 docker images 命令来验证新的镜像是否已经创建。

Push to docker hub

  1. 登录到 Docker Hub:首先,确保你在 Docker Hub 上有一个账户。如果没有,请访问 Docker Hub 注册一个账户。
  2. 在本地标记镜像:在推送之前,你需要为你的镜像添加一个标签,以指定它的名称和版本。使用 docker tag 命令来完成这个任务,语法如下:
1
docker tag existing_image_name:existing_tag your_dockerhub_username/new_image_name:new

例如,如果你的镜像是 my_app,标签是 1.0,并且你的 Docker Hub 用户名是 yourusername,你可以运行如下命令:

1
docker tag my_app:1.0 yourusername/my_app:1.0
  1. 登录到 Docker Hub:在推送之前,使用 docker login 命令登录到 Docker Hub,输入你的用户名和密码:
1
docker login
  1. 推送镜像:使用 docker push 命令将镜像推送到 Docker Hub:
1
docker push yourusername/my_app:1.0
----- End Thanks for reading-----