Docker教程及使用手册
关键名词
image镜像
Docker Images是一个只读模板,用来运行Docker容器
docker container容器
Docker用容器来运行应用,负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。容器是从镜像创建出来的实例(好有面向对象的感觉,类和对象),它可以被启动、开始、停止和删除。
仓库
存放镜像的文件的场所。比如最大的公开仓库是Docker Hub
docker 组件与元素:
- Docker Client 是用户界面,它支持用户与Docker Daemon之间通信。
- Docker Daemon运行于主机上,处理服务请求。
- Docker Index是中央registry,支持拥有公有与私有访问权限的Docker容器镜像的备份。
docker安装
1
curl -sSL https://get.daocloud.io/docker | sh
镜像仓库管理命令
1
2
3
4
5
6
7
8
9
10# 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub eg:docker login -u 用户名 -p 密码
docker login [OPTIONS] [SERVER]
# 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout [OPTIONS] [SERVER]
# 在镜像仓库中搜索镜像 eg:docker search 10 java
docker search [OPTIONS] TERM
# 从镜像仓库中拉取或者更新指定镜像 eg:docker pull java
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 推将本地的镜像上传到镜像仓库,要先登陆到镜像仓库 eg:docker push myapache:v1
docker push [OPTIONS] NAME[:TAG]docker镜像管理命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# 列出所有镜像,同 docker image ls,docker image ls -a 列出所有镜像,包括中间镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
# 删除镜像,同 docker image rm IMAGE
docker rmi [OPTIONS] IMAGE [IMAGE...]
# 从tar文件中载入镜像 eg:docker load < busybox.tar.gz
docker load
# 保存镜像为tar文件 eg:docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
docker save [OPTIONS] IMAGE [IMAGE...]
# docker tag : 标记本地镜像,将其归入某一仓库,eg: docker tag ubuntu:15.10 runoob/ubuntu:v3
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
# 删除 所有未被 tag 标记和未被容器使用的镜像
docker image prune
# 删除 所有未被容器使用的镜像
docker image prune -a
# 删除 所有停止运行的容器
docker container prune
# 使用 Dockerfile 创建镜像 eg:docker build --rm=true -t runoob/ubuntu:v1 . --rm=true表示构建成功后,移除所有中间容器 --no-cache=false表示在构建过程中不使用缓存
docker build [OPTIONS] PATH | URL | -
# 查看指定镜像的创建历史 eg:docker history runoob/ubuntu:v3
docker history [OPTIONS] IMAGE其他命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 显示 Docker 系统信息,包括镜像和容器数
docker info [OPTIONS]
# 显示 Docker 版本信息
docker version [OPTIONS]
# 从容器创建一个新的镜像 eg:docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# 用于容器与主机之间的数据拷贝 eg:docker cp /www 96f7f14e99ab:/www/,docker cp 96f7f14e99ab:/www /tmp/
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
# 检查容器里文件结构的更改
docker diff [OPTIONS] CONTAINER
# Show docker disk usage
docker system df
# Display system-wide information
docker system info容器操作命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24# 列出容器
docker ps [OPTIONS]
# 获取容器/镜像的元数据 eg:inspect mysql:5.6
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
# 查看容器中运行的进程信息,支持 ps 命令参数 eg:docker top mysql
docker top [OPTIONS] CONTAINER [ps OPTIONS]
# 连接到正在运行中的容器 【慎用】 eg:docker attach b22cc1880b7a
docker attach [OPTIONS] CONTAINER
# 从服务器获取实时事件
docker events [OPTIONS]
# 获取容器的日志
docker logs [OPTIONS] CONTAINER
# 阻塞对指定容器的其它调用方法,直到容器停止后退出阻塞
docker wait [OPTIONS] CONTAINER [CONTAINER...]
# 将文件系统作为一个tar归档文件导出到STDOUT eg:docker export -o mysql.tar a404c6c174a2
docker export [OPTIONS] CONTAINER
# 从归档文件中创建镜像 eg:docker import my_ubuntu_v3.tar runoob/ubuntu:v4
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
# 列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口 eg:docker port mymysql
docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
# 删除一个或多个容器 eg:docker rm -f db01
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 创建一个新的容器但不启动它 eg:docker create --name myrunoob nginx:latest
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
容器生命周期管理
docker run 创建一个新的容器并运行一个命令【重要】
语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
1 | OPTIONS说明: |
eg:
1 | # 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx |
start/stop/restart 命令
1 | docker start :启动一个或多个已经被停止的容器 |
docker exec 在运行的容器中执行命令【重要】
语法:docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
1
2
3
4OPTIONS说明:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
eg:
1
docker exec -it 432c029981fa /bin/sh
Dockerfile
它是用户创建自定义镜像的文件。它通常分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时的指令
eg:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#基础系统信息,基于ubuntu 14.04构建的
FROM ubuntu:14.04
MAINTAINER Alex McLain
RUN apt-get -qq update
#安装apache、hg、php5
RUN apt-get -y install apache2 apache2-utils curl mercurial php5 php5-cli php5-mcrypt
# Configure hgweb
ADD hg/add.php /etc/default/hgweb/hg/
#创建一个挂载点,本机或其他容器可以将其挂载。启动时用-v参数进行挂载
VOLUME /var/hg
VOLUME /etc/apache2/sites-available
#暴露的端口号,启动时要通过-p参数指定
EXPOSE 80
#启动时执行的命令
CMD load-default-scripts && service apache2 start && /bin/bash
参数说明:
- MAINTAINER:设置该镜像的作者。语法:MAINTAINER
- RUN:在shell或者exec的环境下执行的命令。RUN指令会在新创建的镜像上添加新的层面,接下来提交的结果用在Dockerfile的下一条指令中。语法:RUN 《command》
- ADD:复制文件指令。destination是容器内的路径。source可以是URL或者是启动配置上下文中的一个文件。语法:ADD 《src》 《destination》
- CMD:提供了容器默认的执行命令。 Dockerfile只允许使用一次CMD指令。 使用多个CMD会抵消之前所有的指令,只有最后一个指令生效。 CMD有三种形式:CMD [“executable”,”param1”,”param2”],CMD [“param1”,”param2”],CMD command param1 param2
- EXPOSE:指定容器在运行时监听的端口。语法如下:EXPOSE
; - ENTRYPOINT:配置给容器一个可执行的命令,这意味着在每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。同时也意味着该镜像每次被调用时仅能运行指定的应用。类似于CMD,Docker只允许一个ENTRYPOINT,多个ENTRYPOINT会抵消之前所有的指令,只执行最后的ENTRYPOINT指令。语法:ENTRYPOINT [“executable”, “param1”,”param2”],ENTRYPOINT command param1 param2
- WORKDIR:指定RUN、CMD与ENTRYPOINT命令的工作目录。语法:WORKDIR /path/to/workdir
- ENV:设置环境变量。它们使用键值对,增加运行程序的灵活性。语法:ENV
- USER:镜像正在运行时设置一个UID。语法:USER
- VOLUME:授权访问从容器内到主机上的目录。语法:VOLUME [“/data”]
docker-compose
脚本安装
1 | curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose |
pip安装
1 | pip install -U docker-compose |
docker-compose.yml编写
eg:
1 | wiki2: |
文档:https://docs.docker.com/engine/reference/builder/#dockerfile-examples
执行脚本
1 | docker-compose up -d |
docker 镜像加速
1 | sudo mkdir -p /etc/docker |
参考文档
https://www.kancloud.cn/docker_practice/docker_practice/469767
https://docs.docker.com/engine/reference/builder/#dockerfile-examples
https://www.kancloud.cn/hfpp2012/docker/467104