1.初始Docker
1.1.引入
正常情况1.2.概念
1.3.安装docker
# 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
- yum install -y docker-ce执行此命令可能会安装失败,再次安装即可
1.4.Docker架构
安装完docker,他会以守护进程(daemon后台运行)的形式存在,docker内部有两个东西:镜像和容器。镜像是类,容器是实例,host里的镜像来源于远程的仓库,仓库分为官方仓库和私有仓库。客户端发送命令给守护进程。来进行操作。
1.5.配置镜像加速器
- 复制所有命令并执行
- 阿里云需要登录,每个人的地址不一样 配置完执行cat /etc/docker/daemon.json查看内容
2.Docker命令
2.1.服务相关命令(守护进程相关命令)
2.2.操作镜像
-
查看镜像(本地)
-
搜索镜像(远程仓库)
- 拉取镜像(远程仓库)不指定版本,默认下最新的版本
-
删除镜像(本地)
如果 id重复就会报错,可以通过名称加版本进行删除 docker rmi redis:latest
- 查询所有镜像的id。docker images -q
- 删除所有的镜像docker rmi `docker images -q`
-
总结
2.3.操作容器(最重要)
容器是由镜像这个物理文件运行起来的实例
-
创建并进入容器
-i表示容器一直运行 -t表示给容器分配一个伪终端(输入完该指令立刻进入容器) --name给容器起个名字 指定镜像以及版本 /bin/bash进入容器的初始化指令
- --name=c1 --name c1 等号空格都可以
- 退出容器 exit
-
查看容器(正在运行以及历史运行的记录)
-
创建容器不进入,后台运行
-d 后台运行 不进入不需要写/bin/bash
-
查看容器
-
进入容器
- 通过-id方式创建容器 通过exec进入容器,这种方式退出exit,容器不会关闭
-
小结
进入容器可以加/bin/bash,可以不加,不加默认也是此
- 启动容器 docker start c4
- 关闭容器 docker stop c4
- 删除容器 docker rm c4 (也可以加容器的id)
- 删除容器 docker rm c1 c2 c3 c4
- 删除所有容器 docker rm
docker ps -aq
不能包含正在运行的容器 - 查看容器信息 docker inspect c4
-
小结
3.Docker容器数据卷
3.1.数据卷概念及作用
3.2.配置数据卷
- docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash
- 容器中的/root/data目录下touch a.txt 宿主机对应目录也可以看到该文件
- echo hello > a.txt 无论在哪个目录下的文档输入文字 另一个目录下文档都可以查看到内容
- cat a.txt
- docker中关闭 删除容器,宿主机目录和内容都存在的
- 再次挂载宿主机数据卷docker run -it --name=c1 -v ~/data:/root/data_container centos:7
-
一个容器挂载多个目录docker run -it --name=c2 -v ~/data2:/root/data2 -v ~/data3:/root/data3 centos:7
- 两个容器挂载同一个数据卷docker run -it --name c3 -v ~/data:/root/data centos:7 docker run -it --name c4 -v ~/data:/root/data centos:7
- 在一个容器的data目录下创建目录 另一个容器的data目录下能看到目录
3.3.配置数据卷容器
-
查看容器绑定目录情况 docker inspect c1
3.4.小结
4.Docker应用部署
4.1.MySQL部署
docker search mysql
docker pull mysql:5.6
cd /opt
mkdir mysql
cd mysql
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
-
进入容器docker exec -it c_mysql /bin/bash 输入用户名 密码 就可以输入sql语句了
4.2.Tomcat部署
docker search tomcat
docker pull tomcat
mkdir /opt/tomcat
cd /opt/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
4.3.Nginx部署
mkdir /opt/nginx
cd /opt/nginx
mkdir conf
cd conf
vim nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
docker search nginx
docker pull nginx
启动ngnix 在/opt/nginx启动
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
编写html 直接访问http://116.62.133.122/
4.4.Redis部署
5.Dockerfile
5.1.Docker镜像原理
- docker启动非常快的原因是docker用的宿主机的内核(bootfs)
- 自己开linux系统就很慢,创建centos容器快,安装centos系统慢,docker做了一个复用。
- linux系统装一个windows的docker是不行的,因为内核不一样,不能复用。
- 下载tomcat镜像,首先看有没有jdk镜像,没有的话先下载jdk,jdk又依赖基础镜像,还需要下基础镜像,这三个组合起来称为tomcat镜像,对外暴露的tomcat镜像
- 文件叠加的好处:如果再下载centos镜像,他也依赖基础镜像,如果基础镜像docker有,就不用下载了,可以复用
- 叠加的操作叫统一文件系统
-
只读意思不能改,改了别人就没法复用了
5.2.Docker镜像制作
- 容器改了一点东西,可以转换成新的镜像,期望改的东西传给其他人(tomcat部署了应用)
- 新的镜像如何传给别人(测试人员),需要压缩,压缩文件可以传输
- 测试人员把压缩文件还原成镜像,运行即可
- docker里面的id使用的时候不用复制全,复制前几位不重复即可
- 容器目录挂载的东西(比如 tomcat下 webapps目录有个项目test),转镜像的时候不会写入,通过数据卷的方式传入的东西commit不会写入
- 容器处理挂载的东西,其他目录新建的文件在转镜像的时候,会写入镜像
docker ps -a
docker commit 1f04cab bj_tomcat:1.0
docker rmi 0c943f
进入容器 在root目录新建文件
docker exec -it c_tomcat bash
cd ~
touch b.txt
docker save -o bj_tomcat.tar bj_tomcat:1.0
当前目录 会有一个tar文件
删除镜像 然后把tar文件还原成镜像
docker load -i bj_tomcat.tar
5.3.Dockerfile概念及作用
5.4.Dockerfile关键字
5.5.Docker案例1
mkdir docker-files
cd docker-files/
vim centos_dockerfile
FROM centos:7
MAINTAINER bj<bj910521@163.com>
RUN yum install -y vim
WORKDIR /usr
cmd /bin/bash
docker build -f ./centos_dockerfile -t bj_centos:1 .
5.6.Docker案例2
- 把springboot打成jar包,cmd运行java -jar ./springboot-hello-0.0.1-SNAPSHOT.jar
- put F:\BaiduNetdiskDownload\5.阶段五-流行框架\6.docker\代码\springboot-hello-0.0.1-SNAPSHOT.jar
- mv springboot-hello-0.0.1-SNAPSHOT.jar docker-files/
- docker pull java:8 依赖的父镜像,可以提前下,也可以不下,如果机器没有会自动下的
FROM java:8
MAINTAINER bj<bj910521@163.com>
ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar
- docker build -f ./springboot_dockerfile -t app .
- docker run -id -p9000:8080 app 因为只要运行 无需进入 所以不起名字 系统默认分配 端口要映射
- http://116.62.133.122:9000/hello
6.Docker服务编排
6.1.服务编排概念
6.2.Docker Compose概述
6.3.案例
# 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.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编排nginx+springboot项目
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
7.Docker私有仓库
7.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/docker/daemon.json
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{"insecure-registries":["私有仓库服务器ip:5000"]}
# 5、重启docker 服务
systemctl restart docker
docker start registry
7.2.上传镜像到私有仓库
# 1、标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
# 2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
7.3.从私有仓库拉取镜像
#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7