什么是docker
Docker是一个开源的应用容器引擎,开发者可以打包应用及依赖包到一个可移植的容器中,然后发布到其他机器上,与平台,硬件等无关。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker构成
Docker包含三大组件:镜像(image),容器(container)和仓库(registry)。
- Docker镜像是创建Docker容器的模板,其中包含了应用程序所需的各项资源。可以使用dockerfile创建docker镜像。
- Docker容器是独立运行的一个或者一组应用,镜像和容器的关系相当于面向对象中的类和对象。
- Docker仓库用来存放镜像,可以理解为代码控制中的代码仓库,默认的docker仓库是Docker Hub。
Docker采用CS架构,所以docker还有Docker client和docker服务器。
- Docker client(客户端),Docker client通过命令行或者其他工具使用Docker API与Docker服务器(Docker daemon)通信。
- Docker服务器(主要是一个docker daemon),包含docker镜像并以容器形式运行镜像的主机,或者说运行Docker daemon和容器的主机。
镜像
Dockerfile
在Dockerfile中,每一条指令都会创建一个镜像层,增加整体镜像的大小。
https://www.cnblogs.com/lsgxeva/p/8746644.html
容器
仓库
Ubuntu Docker安装
方法1
方法2
方法3
- 获取最新版本的docker
1 | wget -qO- https://get.docker.com/ | sh |
Docker使用
镜像操作
从Docker Hub查找镜像
1 | docker search [OPTIONS] TERM |
从Docker仓库pull镜像
以下shell命令从Docker仓库拉取指定镜像:1
docker pull [OPTIONS] [Docker Registry地址] NAME[:TAG]
Docker client利用pull命令从Docker registry拉取Docker Image到Docker host,然后使用run命令在Docker host上运行一个Docker container运行拉取的Docker image。
Push镜像到Docker仓库
将本地镜像上传到镜像仓库,需要先登录:1
docker push [OPTIONS] NAME[:TAG]
或者反过来,Docker client通过build命令在Docker host创建一个子集的Docker image,然后Docker client使用push命令将Docker iamge推送到Docker Registry。这个Docker Image就可以被自己或者其他人pull了。
列出本地镜像
1 | docker images |
使用Dockerfile创建镜像
1 | docker build [OPTIONS] PATH | URL | - |
运行一个新的容器
1 | docker run [OPTIONS] IMAGE [COMMAND] [ARG...] |
运行docker
1 | 启动docker后台服务 |
更换docker仓库镜像
修改/etc/docker/daemon.json文件,在其中加入:
1 | { |
示例
Docker安装tensorflow
1 | docker pull tensorflow/tensorflow:1.14.0-py3 |
Docker安装python 3.7
1 | docker pull python:3.7 |
基于tensorflow创建RL docker
编写Dockerfile如下
1 | # tensorflow=1.14.0, gym=0.15.3, torch=1.3.0 |
然后创建image:
1 | docker build -t mxxhcm/rl-py-3.6:v1 |
Docker命令
NAME[:TAG]默认是 NAME:latest
常见命令
-
列出本地镜像
1
2
3docker images
或者
docker image ls -
从Docker Hub查找镜像
1
2
3
4
5docker search [OPTIONS] TERM
--automated:
--no-trunc:显示完整的镜像描述
-s:列出收藏数不小于指定值的镜像
docker search ubuntu -
从Docker仓库拉取指定镜像
1
2
3
4
5
6
7docker pull [OPTIONS] [Docker Registry地址] NAME[:TAG]
-a:拉取所有tagged镜像
--disable-content-trust:忽略镜像的校验,默认是开启的
默认的Docker registry地址是DockerHub
docker pull java # 从Docker Hub下载最新版Java镜像
docker pull ubuntu:14.04
完整的仓库名和标签名是libary/ubuntu:14.04 -
使用Dockerfile创建镜像
1
2
3docker build -t name:tag #使用当前目标的Dockerfile创建镜像
docker build github.com/creack/docker-firefox #使用URL地址创建镜像
docker build -f /path/to/a/Dockerfile # 使用-f指定Dockerfile文件位置 -
将本地镜像上传到镜像仓库,需要先登录
1
2docker push [OPTIONS] NAME[:TAG]
--disable-content-trust:忽略镜像的校验,默认是开启的 -
运行一个容器
1
2
3
4
5
6
7
8
9
10docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
--name:自己指定一个容器名字,
-t为容器重新分配一个伪输入终端,常和-i连用
-i以交互模式运行容器,常和-t连用
-d表示后台运行
-p指定端口映射,格式为:主机端口:容器端口
images-name:运行的image名称
tag:镜像的版本
docker run --name container-name -d images-name:tag
docker run --name docker_tensorflow -it tensroflow/tensorflow bash -
连接到正在运行的容器
1
docker attach [OPTIONS] CONTAINER
-
开始,停止,重启一个容器
1
docker start/stop/restart container-name
-
杀死一个运行中的容器
1
docker kill -s KILL container-name
-
创建一个容器但是不启动
1
docker create --name container-name -d images-name:tag
-
列出容器
1
2docker ps
加上-a显示所有的容器,包含未运行的
容器生命周期管理
- run
- start/stop/restart
- kill
- rm
- pause/unpause
- create
- exec
容器操作
- ps
- inspect
- top
- attach
- events
- logs
- wait
- export
- port
容器rootfs命令
- commit
- cp
- diff
镜像仓库
- login
- pull
- push
- search
本地镜像管理
- images
- rmi
- tag
- build
- history
- save
- load
- import
info/version
- info
- version
参考文献
1.https://docs.docker.com/engine/install/ubuntu/
2.https://juejin.im/post/5d57c1b5f265da03dc076ba6
3.https://www.cnblogs.com/chenxuming/p/9682571.html
4.https://www.cnblogs.com/wushuaishuai/p/9984228.html
5.https://www.cnblogs.com/informatics/p/8276172.html