简单介绍
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文件夹,不要惊讶
关于开机自启的命令
sudo systemctl start docker
启动dockersystemctl 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 -it 容器id bash
进入容器,废话一句,这里和进入一个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
github下载安装docker-compose(慢)sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
daocloud下载安装docker-compose(快)sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
创建软链sudo chmod +x /usr/local/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: dojaneyos65_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=123456
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 logs -f
全屏滚到底部并继续持续输出日志,-t
加上时间戳,--tail=10
最后十条
docker-compose pull 镜像名称
拉取服务中的镜像docker-compose restart
重启项目中的服务docker-compose restart 容器名称
重启指定名称
docker-compose rm
删除所有停止状态的容器docker-compose rm 容器名称
删除指定的容器
docker-compose pause
暂定容器docker-compose unpause
恢复在暂定中的容器
docker和docker-compose离线安装
内网CentOS安装nginx等软件是会把人气死的,所以请谨慎操作,建议用docker安装
离线安装docker
- 先去这个网站下一个docker
https://download.docker.com/linux/static/stable/x86_64/
- 然后拷到服务器解压
tar -zxvf docker名称.tgz
- 复制到
/usr/bin/: sudo cp -ar ./docker/* /usr/bin/
- 然后查看版本:
docker --version
- 最后后台运行docker:
dockerd &
离线安装docker-compose
- 先去这个网站下一个docker-compose
https://github.com/docker/compose/releases
- 直接拷贝到服务器,然后移动并重命名
sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
- 然后给个执行权限:
sudo chmod +x /usr/local/bin/docker-compose
- 最后查看版本:
docker-compose -v
离线使用镜像
- 在本机或有网的机器上对镜像打包:
docker save -o 你取的名称.tar 镜像id
- 拷贝到离线机器,然后直接加载就完了
docker load -i 你取的名称.tar
最后,巨坑
- 导入镜像后会发现镜像的repository和tag都是none,所以在使用docker-compose指定imag属性的时候就会找不到,然后就会去网络环境拉取镜像
- 设置镜像的repository和tag
docker tag 镜像id 镜像网络地址:版本
- 实例:
docker tag 0901 daocloud.io/library/nginx:latest
后记
- 命令都都是持续更新中…
- 参考文档:菜鸟教程