Docker的特点
- 保持应用运行环境一致,可任意发布不同发行版的Linux上
- 多个容器共享系统资源,相互隔离
- 快速创建,快速启动
Docker的基本概念
镜像
运行环境与配置等非动态数据 - readonly file system
使用应用版本化容器 = 镜像 + 读写层
RW file system仓库
公库
私库Docker hub 官方维护的仓库
注册后可以把私人的镜像推送到Docker hub-
Dockerfile
定义镜像内容:例如应用的配置文件
在项目中的使用
以正式环境的MySQL cluster的Dockerfile和build_prod.sh文件为例
- docker build 命令 根据同级目录下的Dockerfile文件内容 生成镜像
- docker tag 给镜像一个tag 并制定它属于某个仓库
- docker push 把镜像推送到仓库
- docker run 创建容器
- docker container prune --force 删除未使用的镜像
- export 定义一个变量
- docker container stop 停止指定容器
- exec 在容器中执行命令
run 命令
- -d 表示容器在后台运行
- --net 指定容器的网络连接类型 例如VM的桥接模式
网桥模式: 主机上使用同一个网桥的不同容器可以互相通信 - --name 容器名称
- --mount type 目录挂载方式(后文详细解析)
- 镜像 : 15989280211/mysql-cluster
- 创建容器后执行命令 ndb_mgmd 启动 MySQL cluster mgmd节点
- --dns 注意 当容器需要对外网发出请求时 DNS必须配置正确 例如发短信功能
挂载
- 把主机目录挂载到容器 可以避免重建容器后数据丢失 例如Mysql
-
bind模式
--mount type=bind,src=/dsk/c/mysql/mg1/data,dst=/var/lib/mysql
- 容器访问目录 /var/lib/mysql ,它在主机上的源目录为/dsk/c/mysql/mg1/data
- 如果 /dsk/c/mysql/mg1/data 不存在会报错
-
volume
-v /home/docker/mariadb/cluster0/conf:/etc/mysql/conf.d
volume的好处是新建容器不会清空目录的内容
例如第一次创建MariaDB容器并设置了用户和用户权限,新建容器后可以继续使用
常用命令
- 打印容器日志
docker logs -f -t --tail 500 xlsys-distributed-server-rd10080
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
- 进入容器
sudo docker exec -it rmq-1 /bin/bash
- 查看当前docker有哪些进程
docker ps
docker container ls
- 复制文件到容器
docker cp ./keyfile 0597c4f091xxx:/home
复制keyfile到容器 0597c4f091xxx的home目录