目录
一、安装docker
安装依赖工具
yum install -y yum-utils device-mapper-persistent-data lvm2
切换阿里云下载docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
让yum自动检测 那个原速度最快 优先使用
yum makecache fast
安装docker-ce 开源版本
yum -y install docker-ce
启动docker 服务
service docker start
重启docker
systemctl restart docker
查看docker版本
docker version
从docker服务中 拉取 hello-world 镜像
docker pull hello-world
运行 hello-world 成功运行Hello from Docker! 表示安装完成。
docker run hello-world
阿里云加速服务
登录阿里云。搜索 容器镜像服务 – 镜像工具 – 镜像加速器 – 复制 centos 环境下的 加速命令 ,执行
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://54hor5fq.mirror.aliyuncs.com”]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
二、Docker常用命令
docker pull 镜像名字<:tagks> - 从远程仓库拉取镜像
docker images - 查看本地镜像
docker run 镜像名称<:tags> - 创建容器,启动应用
docker ps - 查看正在运行中的镜像
docker rm <-f> 容器id - 删除容器
docker rmi <-f> 镜像名称: - 删除镜像
docker 远程仓库网站 (hub.docker.com) ,可以查看需要下载的镜像和版本
操作tomcat 案例:
拉取最新版本/使用最多的 tomcat
docker pull tomcat
拉取指定版本 tomcat
docker pull tomcat:8.5.46-jdk8-openjdk
创建tomcat容器 ,启动成功后,可以按 ctrl + c 退出
docker run tomcat
创建tomcat容器 并且指定 宿主机和容器机 之间的端口映射 -d:表示后台运行
docker run -d -p 8000:8080 tomcat
停止容器
docker stop 容器ID
移除容器
docker rm 容器ID
停止并移除
docker rm -f 容器ID
查看镜像
docker images
删除镜像
docker rmi tomcat:TAG
三、容器内部结构
在容器中执行命令 格式:
docker exec [-it] 容器ID 命令
exec 在对应容器中执行命令
-it采用交互方式执行命令
示例:docker exec -it 073846ed2fe68b /bin/bash
退出容器:exit;
docker相关文件 默认存储位置
cd /var/lib/docker
四、容器生命周期
create -> start -> running -> paused -> stop -> destroy -> deleted
docker create run start pause unpause stop rm
五、Dockerfile 镜像描述文件
Dockerfile 是一个包含用于组合镜像的命令的文本文档
Docker 通过读取Dockerfile中的指令按步骤自动生成镜像
docker build -t 机构/镜像名<:tags> Dockerfile目录
案例:Dockerfile 自动部署Tomcat应用
创建Dockerfile 文件,写入以下内容:
#来自哪个基准镜像
FROM tomcat:latest
#说明信息:这个镜像的所有者/机构
MAINTAINER jack.com
#LABEL version=“1.0”
#LABEL description=“个人学习使用”
#指定工作目录路径 不存在自动创建 类似于cd
WORKDIR /usr/local/tomcat/webapps
#添加/复制 docker-web 到容器的 目录中,会自动解压tar.gz,还具备添加远程文件功能
ADD docker-web ./docker-web
#ENV 设置环境常量
#ENV JAVA_HOME /usr/local/openjdk8
#RUN ${JAVA_HOME}/bin/java -jar test.jar
构建
docker build -t jack.com/mytomcat:1.0 /usr/image/first-dockerfile 用.表示当前目录
运行
docker run -d -p 8001:8080 jack.com/mytomcat:1.0
进入容器查看
docker exec -it 95df962bcbf6 /bin/bash
Dockerfile执行命令
RUN:在build构建时执行命令
RUN yum install -y vim #shell命令运行方式
RUN [“yum”,“install”,"-y",“vim”] #exec运行方式
#Dockerfile 中有多个ENTRYPOINT/CMD 命令时,只会执行最后一条,并且他们是 拼接执行的,当启动容器有追加CMD命令时会覆盖Dockerfile里面的CMD命令
ENTRYPOINT:容器启动时执行的命令
CMD:容器启动后执行默认的命令或参数
案例:构建Redis镜像
Dockerfile 文档写入:
FROM centos
RUN [“yum”,“install”,"-y",“gcc”,“gcc-c++”,“net-tools”,“make”]
WORKDIR /usr/local
ADD redis-4.0.2.tar.gz .
WORKDIR /usr/local/redis-4.0.2/src
RUN make && make install
WORKDIR /usr/local/redis-4.0.2
ADD redis.conf .
EXPOSE 6379
CMD [“redis-server”,“redis.conf”]
构建
docker build -t jack.com/docker-redis .
启动
docker run -d -p 6379:6379 jack.com/docker-redis
六、容器间的通信
#查看容器元数据 Networksetting ipAddress
docker inspect
单向通信 :
创建一个web应用 连接到 database容器
docker run -d --name web --link database tomcat
docker run -d --name database -it centos /bin/bash
双向通信 (bridge网桥):
#查看网络
docker network ls
创建网桥
docker network create -d bridge my-bridge
网桥绑定容器 同一个网桥分组,可以实现互相通信
docker network connect my-bridge web
docker network connect my-bridge database
七、Volume 容器间的数据共享
- 通过设置-v挂载宿主机目录
docker run --name 容器名称 -v 宿主机路径:容器内挂载路径 镜像名
实例:docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat - 通过 --volumes-from 共享容器内挂载点
创建共享容器
docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
共享容器挂载点
docker run --volumes-from webpage --name t1 -d tomcat
案例:挂载宿主机的:/usr/webapps目录 到tomcat容器的webapps
- -v
#在宿主机 /usr 目录下添加 webapps 目录
#启动tomcat容器:
docker run --name t1 -p 8000:8080 -d -v /usr/webapps:/usr/local/tomcat/webapps tomcat
#启动tomcat2容器:
docker run --name t2 -p 8001:8080 -d -v /usr/webapps:/usr/local/tomcat/webapps tomcat
#然后修改index.html,可以发现 2个tomcat 同步改变了。
- –volumes-from
#创建共享容器
docker create --name webpage -v /usr/webapps:/usr/local/tomcat/webapps tomcat /bin/true
#启动容器 并关联到共享容器
docker run -p 8002:8080 --volumes-from webpage --name t3 -d tomcat
docker run -p 8003:8080 --volumes-from webpage --name t4 -d tomcat
八、compose 容器编排工具
单机多容器部署工具:解决多容器之间的依赖关系
通过yml文件定义多容器如何部署
安装步骤 官网步骤:https://docs.docker.com/compose/install/
#国内镜像(推荐):
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-uname -s
-uname -m
> /usr/local/bin/docker-compose
#官方
sudo curl -L “https://github.com/docker/compose/releases/download/v1.29.2/docker-compose-
(
u
n
a
m
e
−
s
)
−
(uname -s)-
(uname−s)−(uname -m)” -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#查看版本
docker-compose -version
案例:安装WordPress 开源博客
cd /usr
mkdir workpress
vim docker-compose.yml
里面粘贴官网的 yml脚本
https://docs.docker.com/samples/wordpress/
安装执行
docker-compose up -d
安装成功后访问 博客首页
http://47.100.242.59:8000/
案例:部署 APP应用+数据库
在 /usr 目录下创建app、app-db文件夹,和docker-compose.yml文件
1. APP应用 Dockerfile
FROM openjkd:8u222-jre
WORKDIR /usr/local/app
ADD app.jar .
ADD application.yml .
ADD application-dev.yml .
EXPOSE 80
CMD [“java”,"-jar",“app.jar”]
#构建容器
docker build -t jack.com/app .
#创建容器
docker run jack.com/app
2. 数据库 Dockerfile
FROM mysql:5.7
#初始化数据库
WORKDIR /docker-entrypoint-initdb.d
ADD init-db.sql .
#构建容器
docker build -t jack.com/app-db .
#创建容器 并指定root的密码
docker run -d -e MYSQL_ROOT_PASSWORD=123456 jack.com/app-db
#进入容器登录MYSQL
docker exec -it aae73fa77d75 /bin/bash
mysql -uroot -p123456
3. docker-compose.yml
文件内容如下:
version: '3.3'
services:
# 服务名 网络名
db:
build: ./app-db/
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
app:
build: ./app/
# 设置依赖
depends_on:
- db
# 端口映射
ports:
- "80:80"
restart: always
#执行docker-compose
docker-compose up -d
#查看日志
docker-compose logs
#移除容器
docker-compose down
#application.yml 中数据库的主机名localhost 需要改成db,docker会自动帮我们找到MYSQL主机