Docker 入门简介

Docker优点

Docker 安装与Registry V2私有仓库搭建 中已经简单提过Docker。
Docker 的优点很多:

  1. 高效利用系统资源
  2. 更快的启动速度
  3. 一致的运行环境
  4. 持续交付和部署
  5. 方便的迁移
  6. 轻松的维护和扩展
  7. 采用我喜欢的Go语言进行开发

Docker基础

Docker 3大基础概念:镜像、容器、仓库。

Docker镜像

Docker镜像是一个特殊的文件系统,包括容器运行时的程序、库、资源和配置文件,不包含动态数据。Docker 采用UnionFS 构建镜像。镜像的构建是一层层的,每一层构建完就不会发生改变,也就是说镜像的内容在构建之后不会被改变。

对镜像的操作通常有以下几种:

获取镜像

1
2
3
4
docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
docker pull 172.18.2.40:5000/sonatype/nexus3:3.1.0
docker pull sonatype/nexus3
docker pull registry

172.18.2.40:5000 是Docker Registry地址,没有这个地址则默认是hub.docker.com
sonatype/nexus3 是仓库名,仓库名一般是“用户名/软件名”组成。若只有软件名,则默认用户名是library。
3.1.0 是标签,也叫版本号,不指定标签则默认是latest,最好还是指定标签,更直观的知道用的是那个版本。

运行镜像

1
docker run -d -p 8080:8081 -v /data/nexus:/nexus-data --name nexus 172.18.2.40:5000/sonatype/nexus3:3.1.0

-d 指的是后台运行
-p 8080:8081 指把容器8081端口映射到主机8080端口,格式为“主机端口:容器端口”
-v /data/nexus:/nexus-data 把容器里的/nexus-data 目录,挂载到主机的/data/nexus目录。
–name nexus 对容器命名
172.18.2.40:5000/sonatype/nexus3:3.1.0 镜像名
运行镜像之后就变为容器啦。

列出镜像

1
docker images

创建镜像
创建镜像有2种方式,一种是commit,另一种是Dockerfile。

  1. 下载已有镜像,添加内容,然后commit,docker commit -m “message” 容器id 仓库:标签
  2. 利用Dockerfile创建docker build -t=“仓库:标签”,一个镜像不能超过127层。

删除镜像
没有被使用的镜像才可以被删除

1
docker rmi 仓库:标签

删除没有标签的本地镜像

1
docker rmi $(docker images -q -f "dangling=true”)

导入镜像

1
cat ubuntu-16.10-x86_64-minimal.tar.gz | docker import - ubuntu:16.10

上传镜像

1
docker push 172.18.2.40:5000/sonatype/nexus3:3.1.0

保存和加载镜像

1
2
docker save -o xxx.tar 仓库:标签
docker load —input xxx.tar

Docker容器

容器的实质是进程,进程运行在一个隔离的环境里。
容器运行是产生的数据如果没有映射出来的话,将会在容器消亡的时候消亡。
容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷或者绑定宿主目录。

创建并启动

1
docker run

跟在镜像中说明的一样,从镜像新建并启动容器。

启动已停止的容器

1
docker start 容器名

停止容器

1
docker stop 容器名

重启容器

1
docker restart 容器名

打印容器启动日志

1
docker logs 容器名

进入容器

1
docker attach 容器名

导出容器

1
2
docker export 容器名  > xxx.tar
cat xxx.tar | docker import - xx/xxx:v1.0

docker import 将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),可以重新指定标签等元数据信息。
docker load 将保存完整记录,体积要大,不能指定标签等元数据信息。

删除容器

1
2
3
docker rm 容器名 //删除停止状态的容器,删除运行状态的要加 -f 参数。

docker rm ${docker ps -a -q} //删除所有停止状态的容器

Docker仓库

Registry包含多个仓库,每个仓库包含多个标签,每个标签对应一个镜像。

1
2
3
docker tag wendyeq/tomcat8 172.18.2.40:5000/wendyeq/tomcat8:1.0
docker push 172.18.2.40:5000/wendyeq/tomcat8:1.0
docker pull 172.18.2.40:5000/wendyeq/tomcat8:1.0

MORE

更多的内容请使用神器--help

1
2
3
4
docker --help
docker run --help
docker start --help
...

或者查看Docker命令行文档