docker容器技术
简单介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
docker的基本概念
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
以上都是来自菜鸟教程的资料
简单介绍
docker就是一个可以产生很多虚拟机的应用容器引擎,每个虚拟机都是需要镜像的,每个镜像都是一个单独的应用,例如mysql,redis等等,容器就是虚拟机,所以使用docker可以快速搭建很多应用服务,而告别一些繁琐的配置
- docker 有官方的仓库来保存很多的镜像,这里的仓库和npm、maven代码仓库是同理,同样的仓库在国外,最好使用国内的仓库地址会比较快,例如:daocloud等等
- 当然也可以创建自己自定义的镜像,这样的自定义镜像可以帮助同事快速搭建环境,解决环境不一致的问题,同样自定义镜像也可以上传到云上保存
docker的安装和启动
- CentOS 7 的版本安装可以使用
curl -sSL https://get.daocloud.io/docker | sh
- CentOS 8 安装可能会报错,反正我是踩坑了,缺少依赖,找度娘去吧
- 安装完成后当前目录会产生一个containerd文件夹,不要惊讶
关于开机自启的命令
- 启动docker
sudo systemctl start docker
- 查看已经启动的服务
systemctl list-units --type=service
- 查看是否设置了开机自启
systemctl list-unit-files | grep enabled
- 设置开机自启
systemctl enable docker.service
- 关闭开机自启
systemctl disable docker.service
docker的常见命令
docker ps
查看当前工作的容器docker ps -a
查看所有容器
docker logs 容器id
查看容器内部的输入日志docker run -itd 镜像名称 bash
指定镜像在后台启动一个新容器docker start 容器id
启动一个停止的容器docker restart 容器id
重启一个容器docker stop 容器id
停止容器docker exec
进入容器,废话一句,这里和进入一个linux的虚拟机感觉一样docker rm -f 容器id
删除容器docker rmi 镜像名称
删除镜像
docker-compose介绍
docker存在的一些问题
-
docker对管理多个容器配置还需要一条命令的重复操作
-
docker对配置端口的映射等等配置麻烦,不适合批量管理
-
一台服务器往往存在多个应用服务,docker重复配置效率低下
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
dokcer-compose的安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
下载安装docker-composesudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
创建软链
docker-compose.yml例子
# 关闭防火墙后docker需要重启:service docker restart
version: '3.1'
services:
nginx:
restart: always
image: daocloud.io/library/nginx:latest
container_name: "nginx"
ports:
- "80:80"
volumes:
- "/opt/docker_nginx/nginx/conf.d:/etc/nginx/conf.d"
- "/opt/docker_nginx/postCode:/usr/share/nginx/html/postCode/web"
mysql:
restart: always
image: daocloud.io/library/mysql:5.7.4
container_name: "mysql"
ports:
- "3306:3306"
environment:
TZ: Asia/shanghai #指定时区
MYSQL_ROOT_PASSWORD: dojanep47902tyoslwYIJ547865_901f_hrzg
volumes:
- "/opt/docker_mysql/data:/var/lib/mysql"
redis:
restart: always
image: daocloud.io/library/redis:3.2.9
container_name: "redis"
command: redis-server --requirepass qazwsxedcrfvtgbyhnujmikolp
ports:
- "6379:6379"
environment:
TZ: Asia/shanghai #指定时区
volumes:
- "/opt/docker_redis/redis:/usr/local/etc/redis"
rabbitmq:
restart: always
image: daocloud.io/library/rabbitmq:3.7.26-management
container_name: "rabbitmq"
hostname: myRabbitmq
ports:
- "8672:15672" #http端口
- "8673:5672" #通信端口
environment:
- RABBITMQ_DEFAULT_USER=root
- RABBITMQ_DEFAULT_PASS=15572046172
volumes:
- "/opt/docker_rabbitmq:/var/lib/rabbitmq"
docker-compose的常用命令
docker-compose --version
查看版本docker-compose up -d
在后台运行该服务docker-compose ps
列出所有容器docker-compose stop
停止正在运行的容器docker-compose stop 容器名称
停止指定容器
docker-compose start
启动停止的容器docker-compose start 容器名称
启动指定容器
docker-compose down
停止并删除容器docker-compose logs
输出所有容器的日子docker-compose pull 镜像名称
拉取服务中的镜像docker-compose restart
重启项目中的服务docker-compose restart 容器名称
重启指定名称
docker-compose rm
删除所有停止状态的容器docker-compose rm 容器名称
删除指定的容器
docker-compose pause
暂定容器docker-compose unpause
恢复在暂定中的容器
后记
- 命令都都是持续更新中...
- 参考文档:菜鸟教程