Docker Usage
docker主要分成images和container,images可以理解成系统的源文件,container就像是把源文件实例化成系统。把images启动成container那我们就相当于得到了可以操作的系统。
Docker image
docker images
可以查看已经下载下来的镜像:
1 | > docker images |
列表包含了 仓库名
、标签
、镜像 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 | > docker ps -a |
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 | $ docker run -dit ubuntu |
注意: 如果从这个 stdin 中 exit,会导致容器的停止。
exec
命令
-i
-t
参数
docker exec
后边可以跟多个参数,这里主要说明 -i
-t
参数。
只用 -i
参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。
当 -i
-t
参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。
1 | $ docker run -dit ubuntu |
如果从这个 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
- 登录到 Docker Hub:首先,确保你在 Docker Hub 上有一个账户。如果没有,请访问 Docker Hub 注册一个账户。
- 在本地标记镜像:在推送之前,你需要为你的镜像添加一个标签,以指定它的名称和版本。使用
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 |
- 登录到 Docker Hub:在推送之前,使用
docker login
命令登录到 Docker Hub,输入你的用户名和密码:
1 | docker login |
- 推送镜像:使用
docker push
命令将镜像推送到 Docker Hub:
1 | docker push yourusername/my_app:1.0 |