我们写的代码经过几个环境之后才会发布:
开发环境 --- 测试环境 --- 生产环境
Docker是一个开源的应用容器引擎
诞生于2013年初,基于Go语言实现, dotCloud公司出品(后改名Docker Inc)
Docker可以让开发者打包他们的应用以及依赖包 到一个轻量级,可移植的容器中,然后腹部到任何流行的liunx机器上
容器是完全使用沙箱机制相互隔离
容器性能开销极低
Docker可以运行到MAC,windows, CentOS, UBUNTU等操作系统上,本课基于CentOS 7安装Docker
官网 : Docker: Accelerated, Containerized Application Development
# 1、yum 包更新到最新
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v
镜像( image): Docker镜像 就相当于是一个root文件系统比如官方ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统
容器 (Container) : 镜像 (image) 和容器(Container) 的关系,就像是面向对象程序设计中的对象一样,镜像是静态的定义,容器
仓库(Repository): 仓库可看成一个代码控制中心用来保存镜像
默认情况下.将来从docker hub(https://hub.docker.com/) 上 下载
docker镜像,太慢,一般都会配置镜像加速器
阿里云
网易云
腾讯云
启动docker服务
systemctl start docker
停止docker服务
systemctl stop docker
重启docker服务
systemctl restart docker
查看docker服务状态
systemctl status docker
设置开机启动docker服务
systemctl enable docker
查看镜像: 查看本地所有的镜像
docker images
docker images -q #查看所用的镜像id
搜索镜像:从网络中查找需要的镜像
docker search 镜像名称
拉取镜像: 从Docker仓库下载镜像到本地, 镜像名称格式为 名称: 版本号, 如果版本号不指定则是最新的版本如果不知道镜像版本, 可以去docker hub搜索对应镜像查看
docker pull 镜像名称
删除镜像: 删除本地镜像
docker rmi 镜像id # 删除指定本地镜像
docker rmi 'docker images -q' # 删除所有本地镜像
查看容器
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器
创建并启动容器
docker run 参数
- i :保持容器运行, 通常与-t 同时使用,加入it这两个参数后, 容器创建后自动进入容器中退出容器后,容器自动关闭.
- t : 为容器重新分配一个为输入终端,通常与- i同时使用
-d : 一守护(后台) 模式运行容器,- id 创建的容器在后台运行,需要使用docker exec进入容器,退出后,容器不会关闭
- it 创建的容器一般称为交互式容器, -id创建的容器一般为守护式容器
-- name :为创建容器命名
进入容器
docker exec 参数 # 退出容器, 容器不会关闭
停止容器
docker stop 容器名称
启动容器
docker start 容器名称
删除容器: 如果是运行状态则删除失败 需要停止容器才能删除
docker rm容器名称
查看容器信息
docker inspect 容器名称
数据卷是宿主机中的一个目录或文件
当容器目录和数据卷目录绑定后 , 对方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷
容器数据持久化
外部机器和容器间接通信
容器之间数据交换
酸碱启动容器时,使用 -v 参数 设置数据卷
docker run ... -v 宿主机目录(文件) : 容器内目录(文件) ...
注意事项
目录必须是绝对路径
如果路径不存在会自动创建
可以挂载多个数据卷
docker run -it --name= c3 -v /volume centos: 7 /bin/bash
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
dockerfile是自定义镜像的一套规则
dockerfie由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层
关键字 |
作用 |
备注 |
FROM |
指定父镜像 |
指定dockerfile基于那个image构建 |
MAINTAINER |
作者信息 |
用来标明这个dockerfile谁写的 |
LABEL |
标签 |
用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看 |
RUN |
执行命令 |
执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"] |
CMD |
容器启动命令 |
提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"] |
ENTRYPOINT |
入口 |
一般在制作一些执行就关闭的容器中会使用 |
COPY |
复制文件 |
build的时候复制文件到image中 |
ADD |
添加文件 |
build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务 |
ENV |
环境变量 |
指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value |
ARG |
构建参数 |
构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数 |
VOLUME |
定义外部可以挂载的数据卷 |
指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"] |
EXPOSE |
暴露端口 |
定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
WORKDIR |
工作目录 |
指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径 |
USER |
指定执行用户 |
指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户 |
HEALTHCHECK |
健康检查 |
指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制 |
ONBUILD |
触发器 |
当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大 |
STOPSIGNAL |
发送信号量到宿主机 |
该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。 |
SHELL |
指定执行脚本的shell |
指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell |
需求: 使用docker容器中部署MySQL,并通过外部MySQL客户端操作MySQL Server.
搜索MySQL镜像
拉取MySQL镜像
创建容器
操作容器中的MySQL
首先打开liunx系统或者远程连接工具XShell
docker pull mysql:8.0.11
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_password mysql:8.0.11
其中,-d表示后台运行,--name指定容器名称,-p指定端口映射,-e指定环境变量,mysql:8.表示使用的镜像。
docker exec -it mysql bash
MySQL-u root -p
输入密码
sudo service docker restart
docker pull tomcat:9.0
docker images
docker run -d -p 8080:8080 --name tomcatqaq tomcat:9.0
docker ps
docker ps -a :用于查看最近全部运行过得容器
docker pull nginx
docker images
docker run -it --name nginx( 定义名字 ) -p 8080:80 nginx:latestz (这是nginx最新版本)
mkdir -p /data/nginx/
docker images
微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停.维护工作量会很大
服务编排: 按照一定的业务规则批量管理容器
# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本信息
docker-compose -version
# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
编写 docker-compose.yml 文件
version: '3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
创建./nginx/conf.d目录
mkdir -p ./nginx/conf.d
在./nginx/conf.d目录下 编写itheima.conf文件
server {
listen 80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
在~/docker-compose 目录下 使用docker-compose 启动容器
docker-compose up
6.测试访问
http://192.168.149.135/hello
概念: Docker官方Docker hub(https://hub.docker.com) 是一个用于管理公共镜像的仓库我们可以从上面拉取镜像 到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜 像放到公网当中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像
# 1、拉取私有仓库镜像
docker pull registry
# 2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
# 4、修改daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{"insecure-registries":["私有仓库服务器ip:5000"]}
# 5、重启docker 服务
systemctl restart docker
docker start registry
# 1、标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
# 2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7