1. 前言
由于要在实验室的服务器上跑实验,记录一下常用的docker命令
2. 镜像的常用命令
- 列出:
sudo docker images
- 运行一个镜像
sudo docker run -t -i ubuntu:18.04 /bin/bash
其中-t
表示开启一个terminal,-i
表示接受input - 创建镜像(important)
-
修改已有镜像
由于实验的镜像都创建好了,我们主要是修改已有镜像,然后commit成我们的名字。
步骤:
- 先使用已有的镜像启动容器
sudo docker run -t -i myenv:v1 /bin/bash
ps: 要记住容器的ID,等下要用到。root后面的就是容器id。
- 在容器中随便添加应用
- 用
exit
退出,然后用docker commit
命令提交
sudo docker commit -m "Add somethings" -a "sanjay" d729a4a413ea mynewdocker:v1
其中,-m
来指定提交的说明信息,跟我们使用的版本控制工具一样;-a
可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。
使用 docker images 来查看新创建的镜像。
- 先使用已有的镜像启动容器
-
利用Dockerfile创建镜像
-
- 存出和载入镜像
- 存出镜像
sudo docker save -o ubuntu_18.04.tar ubuntu:18.04
- 载入镜像
sudo docker load --input ubuntu_18.04.tar
- 存出镜像
- 移除镜像
sudo docker rmi ubuntu18.04
Note: 移除镜像是docker rmi, 移除容器的命令是:docker rm
在删除镜像之前要先用docker rm
删除依赖于这个镜像的所有容器。
3.容器的常用命令
-
新建容器并启动
sudo docker run ubuntu:18.04 /bin/echo 'Hello sanjay'
这个输出Hello sanjay
。
启动一个容器bash终端:
sudo docker run -t -i ubuntu:18.04 /bin/bash
-
启动已终止的容器
用docker start
可以将一个已经终止的容器启动运行,具体:- 首先用
sudo docker ps -a
可以查看所有的容器 - 然后选择你想要启动的容器id,比如我想要启动的是id是:
c55969249f25
那么我的命令就是:
sudo docker start c55969249f25
- 首先用
-
以守护态(Daemonized)运行
实验室的机器,一般你都是让他在后台跑,所以用守护态运行
加参数
-d
即可实现。
eg.sudo docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello; sleep 1; done"
容器启动后返回一个唯一的 id,也可以通过 docker ps 命令来查看容器信息。
sudo docker ps
-
终止容器
使用sudo docker stop
来终止一个运行中的容器。
此外,当Docker容器中指定的应用终结时,容器也自动终止。 例如对于只启动了一个终端的容器,通过exit
命令或Ctrl+d
来退出终端时,所创建的容器立刻终止。
终止状态的容器可以用sudo docker ps -a
看到,处于终止状态的容器,可以用sudo docker start {容器id号}
来启动,docker restart
会将一个运行态的容器终止,然后再重新启动它。 -
进入容器
在使用 -d 参数时,容器启动后会进入后台。 某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach
命令或nsenter
工具等。
用这个命令进入更好
sudo docker exec -it id /bin/bash
-
导出和导入容器
- 导出本地某个容器
sudo docker export id > ubuntu.tar
- 导入容器快照
使用docker import
从容器快照文件中导入为镜像sudo docker import - test/ubuntu:v1.0
ps:用户既可以使用docker load
来导入镜像存储文件到本地镜像库,也可以使用docker import
来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
- 导出本地某个容器
-
删除容器
sudo docker rm {id or name}
如果容器在运行,添加-f
可以强行删除。
4.FQA
Actually i have a question which is that if i want to run a docker as a daemonized status but when i enter the docker using command sudo docker exec -it id /bin/bash
to check the task and after that i want to exit using the command exit
in the docker then i will kill the docker running. So how can i exit without killling the docker and keep it in daemonized status?