Docker基础

安装 Docker
# 1.yum包更新到最新
yum update
# 2.安装需要的软件包 yum-config-mapper功能 另外连个是device-mapper驱动依赖
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 
yum install -y docker-ce
# 5.查看docker版本
docker -v
配置docker镜像加速器
#阿里云 容器镜像服务 配置加速器 
#通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://asmpc6kh.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker命令
1. Docker服务相关命令
#启动
systemctl start docker
#停止
systemctl stop docker
#重启
systemctl restart docker
#查看状态
systemctl status docker
#设置开机启动
systemctl enable docker
2. Docker镜像相关命令
#查看本地镜像 
docker images
#查看所有镜像id  
docker images -q 
#查询镜像
docker search redis 
#拉取镜像 冒号后跟随版本号(:version ) 默认下载latest 
docker pull redis 
# https://hub.docker.com 查询版本号 
#删除镜像 IMAGE ID 
docker rmi de25a81a5aO 
#删除镜像 名称版本号 
docker rmi redis:latest 
#删除所有镜像 
docker rmi 'docker images -q'
3. Docker容器相关命令
#查看正在运行容器
docker ps
#查看所有容器 status  Up 运行  Exited 关闭
docker ps -a
#创建一个容器 
docker run -it --name=c1 centos:7 /bin/bash
docker run -id --name=c2 centos:7 
#进入c2 容器
docker exec 参数 #退出容器,容器不会关闭
docker exec -it c2 /bin/bash
  • -i 保持容器运行
  • -t 分配一个输入终端
  • -d 以守护(后台)模式运行容器
  • -it 创建的容器 称为 交互式容器 -id 称为 守护式容器
  • –name 为创建的容器命名
#停止容器
docker stop c2
#启动
docker start c2
#查询所有容器
docker ps -aq
# 删除容器 可以为容器名称 及 id
docker rm c1
#删除所有容器  如果容器是运行状态则删除失败,需停止容器才能删除
docker rm 'docker ps -aq'
#查看容器信息
docker inspect
Docker 容器的数据卷
1. 配置数据卷
#创建容器 -v设置数据卷 1 目录必须是绝对路径 2 目录不存在,会自动创建 3 可以挂在多个
docker run ... -v 宿主文件目录:容器内目录
docker run -it --name=c3 -v /data:/root/data/ centos:7 /bin/bash
2. 数据卷容器
#创建启动C3数据卷容器,使用-v参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
#创建c1 c2容器,使用 --volume-from 参数设置数据卷
docker run -it --name=c1 --volume-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volume-from c3 centos:7 /bin/bash
Docker 应用部署
tomcat部署
#搜索tomcat镜像
docker search tomcat
#拉取tomcat镜像
docker pull tomcat

创建容器,设置端口映射,目录映射

#在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 
-v $PWD:/usr/local/tomcat/webapps \
tomcat

参数说明

-p 8080:8080 将容器的8080端口映射到主机的8080端口

-v $PWD:/usr/local/tomcat/webapps 将主机当前目录挂载到容器的webapps

使用外部机器访问 tomcat

redis 部署
# 下载redis 
docker pull redis:5.0
# 下载官方配置文件 
# 修改配置文件
mkdir -p /etc/nginx
# 开启redis验证
requirepass alidata!  
# 允许外部连接  注释 bing 127.0.01
daemonize yes
#开启redis数据持久化  
appendonly yes
#创建 redis 容器
docker run -id -p 6379:6379 -v /usr/redis/redis.conf:/etc/redis/redis.conf --name=redis redis:5.0 redis-server /etc/redis/redis.conf

mysql 部署
#拉取mysql镜像
docker pull mysql:5.7.29

docker run --privileged=true --name=mysql5.7 
-p 3306:3306 -v/var/lib/mysql:/var/lib/mysql 
-v /etc/my.cnf:/etc/my.cnf 
-v /etc/init.d/:/etc/init.d/ -e MYSQLROOT
Dockerfile

Docker镜像的本质是一个分层文件系统 复用

1. Docker 镜像原理
  1. Docker 镜像是由特殊的文件系统叠加而成
  2. 最底端是bootfs,并使用宿主机的bootfs
  3. 第二层是root文件系统rootfs称为base image
  4. 然后再往上叠加其他的镜像系统
  5. 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供一个统一的视觉,这样就隐藏了多层的存在在用户角度看来,只存在一个文件系统
  6. 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像称为基础镜像
  7. 当从一个镜像启动容器时,Docker会从最顶层加载一个读写文件系统作为容器
2. Docker 镜像制作
容器转镜像
docker commit 容器id 镜像名称:版本号
docker commit 381575 it_tomcat:1.0
#目录挂载 commit 不生效
docker save -o 压缩文件名称 镜像名称:版本号
docker save -o it_tomcat.tar it_tomcat:1.0
docker load -i 压缩文件名称 
docker load -i it_tomcat.tar
Dockerfile
  • Dockerfile 文本文件
  • 包含一条条的指令
  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
  • 官网 https://hup.docker.com
关键字作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签用来标明dockerfile的标签可以使用Label代替Maintainer最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令默认是/bin/bash 格式;RUN command 或者RUN[“command”,“param1”,param2]
CMD容器启动命令提供启动容器时活的默认命令和ENTRYPOIN配合使用 格式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
3. Dockerfile 案例
创建centos7
FROM centos:7           #定义父镜像
MAINTANER it<qq.com>     #定义作者信息
RUN yum install -y vim   #执行安装vim命令
WORKDIR /usr             #定义默认的工作目录
CMD /bin/bash            #定义容器启动执行的命令
部署springboot项目
FROM java:8
MAINTANER it<qq.com>
ADD springboot.jar springboot.jar  #将jar添加到容器中
#CMD java -jar app.jar  #定义容器启动执行的命令
ENTRYPOINT ["nohup","java","-jar","app.jar"]

#通过dockerfile构建镜像
docker build -f dockerfile文件路径 -t 镜像名称:版本 . 
# 使用centos7 制作 java8环境  配置环境变量 
FROM centos:7
MAINTAINER g<qq.com>
RUN mkdir /usr/local/java
ADD jdk-8u251-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_251
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
#创建项目 目录  复制jar包  启动项目
RUN mkdir -p /data/springboot
ADD boot-security-0.0.1-SNAPSHOT.jar /data/springboot/app.jar
ENTRYPOINT ["nohup","java","-jar","/data/springboot/app.jar",">info.log","2>&1","&"]
#部署 redis
docker run -id -p 6379:6379 -v /usr/redis/redis.conf:/etc/redis/redis.conf --name=redis redis:5.0 redis-server /etc/redis/redis.conf
Docker 服务编排

微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量很大

  • 要从Dockerfile build image 或者是dockerhub拉取image
  • 要创建多个container
  • 要管理多个container 启动停止删除

服务编排:按照一定的有业务规则批量管理容器

Docker Compose: 是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完成开发周期,包括服务构建 启动 停止

使用步骤:

  • 利用Dockerfile定义运行环境镜像
  • 使用docker-compose.yml定义组成应用的隔服务
  • 运行docker-compose up 启动应用
1. 安装 Docker Compose
#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

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose -version
2. 卸载 Docker Compose
#二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
3. 使用docker compose 编排nginx+springboot项目

创建docker-compose目录

mkdir ~/docker-compose
cd ~/docker-compose

编写docker-compose.yml文件

名词描述
versiondocker文件的版本
image指定容器镜像就是之前拉取的redis镜像
container_name给这个镜像起一个别名
restartalways:表名开机自启动
command相当于执行一些命令 (–requirepass 指定redis密码 --appendonly yes 这个命令是用于开启redis数据持久化)
ports端口映射,将容器的端口映射到对应宿主机的端口
volumes数据卷的映射.因为一旦容器停止了那么里面的数据也没有.所以我们需要把这个数据文件放在外面,然后映射到容器中
vim 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目录下 编写nginx.conf

vim nginx.conf
server {
	listen 80;
	access_log off;
	location /{
	    proxy_pass http://app:8080
	}
}

在 ~/docker-compose 目录下使用docker-compose 启动容器

docker-compose up 
# 后台执行
docker-compose up -d

测试访问

http://ip/hello
Docker 私有仓库
1. 私有仓库搭建
# 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/docekr/daemon.json
#在上述文件中添加一个key,保存退出。此步用于让docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真是ip
{"insecure-registries":["私有仓库服务器ip:5000"]}
# 5.重启docker
systemctl restart docker
docker start registry
2. 将镜像上传至私有仓库
# 1.标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器ip:5000/centos:7
# 2.上传标记的镜像
docker push 私有仓库服务器ip:5000/centos:7
3. 从私有仓库拉取镜像
# 拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值