操作环境:mac OS 10.14.6
docker版本:10.03.1
终端:iterm2 3.3
时间:2019年8月

容器相当于镜像的实例,镜像相当于只读模板,容器在镜像所有层级之上创建了一个可写层,所有操作都将在这一层级进行。

运行

$ docker run [参数] 镜像 [命令] [命令参数...]

# 执行命令, 执行后自动进入容器bash
$ docekr run -it ubuntu:latest bash

执行命令后,如果本地没有对应的镜像,docker会先到指定的仓库进行pull, 默认为:hub.docker.com
使用命令docker run --help 获取所有的帮助

使用run后docker执行的操作包括但不限于:
* 检查本地是否存在指定的镜像,不存在就从公有仓库下载
* 利用镜像创建并启动一个容器
* 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
* 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
* 从地址池配置一个 ip 地址给容器
* 执行用户指定的应用程序
* 执行完毕后容器被终止

添加参数-d, 让容器进入后台运行,即守护模式

# 普通运行
$ docker run -it ubuntu echo "hello docker run"

# 后台运行
$ docker run -it -d ubuntu echo "hello docker background" 

# 查看后台容器输出
$ docker logs <container>  # 具体查看操作图

守护模式中的容器, 使用exec进入

docker exec [参数] 镜像 [命令] [命令参数...]

说明: 进入守护模式时,docker将返回容器完整ID
使用exec通过容器id进入容器内

查看容器

# 查看运行中的容器
$ docker ps

# 查看所有容器
$ docker ps -a

停止

$ docker stop [参数] 镜像 [镜像...]

# 新开一个终端,执行命令,停止ubuntu:latest
$ docker stop 4e7 # 通过使用容器的id停止容器

注意:通过id进行操作,需要输入ID的前3位及以上16进制字符

启动停止后的容器

$ docker start [参数] 镜像 [镜像...]

$ docker start 4e7 # 通过容器ID启动容器

保存容器的修改commit

不推荐使用commit构建镜像,会造成层级文件的混乱,不知道什么文件被修改、被添加了,最主要是整个构建过程使用的命令是不可知的,由此生成的镜像被称为黑箱镜像,这样的镜像只有使用命令的人才知道具体使用什么命令。后续维护成本极高。

$ docker commit [选项] <容器> [<仓库名>[:<标签>]]

# 使用之前后台运行的ubuntu
$ docker commit --message 修改了什么  b15 zeryter-ubuntu:v1.0

说明: --message 添加修改说明
如果只是迁移容器而进行commit构建镜像,有更好的办法export & import

导出&导入

导出

docker export [选项] 容器

# 使用ubuntu容器的ID 将容器导出为  ubuntu.tar
docekr export ubuntu_ID > ubuntu.tar
# 另一种导出方式, 使用参数-o指定导出文件
docker export -o ubuntu.tar ubuntu_ID

导入

$ docker import [选项] 文件|文件URL|- [镜像名称[:标签]]
# 将导出为tar包的容器,导入时将保存为镜像,导入后使用images查看导入信息

导入tar包后,docker会将生成的镜像唯一ID返回
import导入包支持URL,docker将自动下载对应的包,其中包可以是.tar, .tar.gz, .tgz, .bzip, .tar.xz, or .txz

删除&清理

$ docker rm [OPTIONS] CONTAINER [CONTAINER...]

rm只能删除已经停止的容器

版权声明:本文为zeryter原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zeryter/p/11372140.html