环境
- CentOs7
安装Docker
- 卸载安装过的Docker
yum -y remove docker*
sudo rm -rf /var/lib/docker
(删除所有的镜像、容器、数据卷、配置文件等)
yum list installed | grep docker
例如:
- 具体安装
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
(set up repository)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(use aliyun docker)
sudo yum install docker-ce
(默认安装)
例如:
- 检查安装
docker version
例如:
基本操作
- 运行第一个容器
docker run hello-world
例如:
运行:
docker run -it ubuntu /bin/bash
参数说明:
- -i:交互式操作
- -t:终端
- ubuntu:镜像
- /bin/bash:命令
例如:
- 查看本地镜像库
docker images
例如:
- 查看帮助
docker --help
例如:
- 显示运行中容器
docker ps
例如:
- 显示所有容器(包含已经中止的)
docker ps -a
例如:
- 继续运行容器并进入
docker restart [name]
docker attach [name]
例如:
- 拉取镜像(以MySQL为例)
docker pull mysql:5.7
例如:
dockfile
解释
- Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
- Dockerfile是一个包含用于组合映像的命令的文本文档,可以使用在命令行中调用任何命令。
- Docker通过读取Dockerfile中的指令自动生成映像。
- docker build命令用于从Dockerfile构建映像,可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
例:docker build -f /path/Dockerfile
基本结构
四部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
常用指令
- FROM
指定基础镜像且必须为第一个命令
FROM <image>:<tag>
- MAINTAINER
指维护者信息
MAINTAINER <name>
- RUN
指构建镜像时执行的命令
RUN <command>
- ADD
指拷贝文件或目录到镜像,可以访问网络资源,tar自动解压
ADD <src>… <dest>
- COPY
指拷贝文件或目录到镜像,不会自动解压文件,也不能访问网络资源
COPY <src>… <dest>
- EXPOSE
指声明容器运行的服务端口
EXPOSE <端口号>
- ENV
指设置容器内环境变量
ENV <key>=<value>
- CMD
指运行容器时执行的Shell命令
CMD ["executable","param1","param2"]
- ENTRYPOINT
指运行容器时执行的Shell命令
ENTRYPOINT ["executable", "param1", "param2"]
- VOLUME
指定容器挂载点到宿主机自动生成的目录或其他容器
VOLUME ["/path/dir"]
- WORKDIR
指工作目录
WORKDIR /path/workdir
- USER
指定运行容器时的用户名或 UID
USER user
- ARG
指定传递给构建运行时的变量
ARG <name>[=<default value>]
构建Docker练习
- 创建文件夹
mkdir mydocker
cd mydocker
例如:
- 创建以及书写dockerfile文件
vim dockfile
例如:
- 构建镜像
docker build . -t hello
例如:
-运行镜像
docker run -it --rm hello -H
例如:
使用MySQL容器
- 启动服务器
sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
例如:
- 启动客户端
docker run -it --net host mysql:5.7 "sh"
例如:
- 数据库文件存放
docker exec -it mysql2 bash
例如:
- Dockerfile 的 VOLUME /var/lib/mysql 的含义
例如:
每次启动 mysql 容器,docker 创建一个文件卷挂载在容器内/var/lib/mysql位置,且存放在主机(host)的 /var/lib/docker/volumes/ 目录下。
- 创建卷并挂载
docker rm $(docker ps -a -q) -f -v
docker volume create mydb
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7
例如:
将自己定义的数据卷挂载在 /var/lib/mysql。
- 启动客户端容器链接服务器
docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash
mysql -hmysql -P3306 -uroot -proot
例如:
使用 --link 连接两个容器,在客户端容器内可以使用 mysql 这个别名访问服务器。
- 挂载现有数据库
docker run -v "/path/data":/var/lib/mysql --user 1000:1000 --name mysql_name -e MYSQL_ROOT_PASSWORD=password -d mysql:tag
- 修改容器配置
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
Docker compose
- 安装
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-
uname -s-
uname -m" > /usr/local/bin/docker-compose
例如:
- 编写yml
- 启动服务
docker-compose -f stack.yml up
Docker 网络
- 查看容器网络
docker network ls
类型:
- Docker0 ——默认,桥接
- bridge ——本机内网络
- host ——主机网卡
- overlay——跨主机网络
- none
- Custom——网络插件
Docker-Conpose为你的应用创建一个网络,Docker-Compose为每个Service创建一个容器,并加入到这个网络中,被网络中的其它容器访问和发现。此容器能够以容器名称作为hostname标识,被其它容器访问。
- 备制支持 ifconfig 和 ping 命令的 ubuntu 容器
docker run --name unet -it --rm ubuntu bash
apt-get update
apt-get install net-tools
apt-get install iputils-ping -y
ifconfig
ping <your host ip>
install 后进行ifconfig 以及 ping ,如下:
- 制作
docker commit unet ubuntu:net
制作后,查看镜像结果如下:
- 创建自定义网络
docker network create mynet
创建并查看:
- 在两个窗口创建 u1,u2 容器网络
docker run --name u1 -it -p 8000:8000 --net mynet --rm ubuntu:net bash
docker run --name u2 --net mynet -it --rm ubuntu:net bash
docker network connect bridge u1
docker network disconnect mynet u1
连接并断开:
容器监控与日志
- 检查docker状态
docker info
docker info --format {{.ServerVersion}}
- 查看容器内进程
docker top
docker stats
top:
stats:
- 容器详细信息
docker inspect
例如:
- 容器日志
docker logs <name/ID>
便于调试以及分析!