Docker描述
- docker是开源的应用程序引擎,基于go语言开发
- 容器是完全使用沙箱机制,容器开销极低
- docker就是容器化技术的代名词
- docker也具备一定虚拟化职能
安装docker
下载docker
下载地址:https://docs.docker.com/engine/install/
安装yum-utils安装包
yum install -y yum-utils
安装数据存储驱动包
yum install -y device-mapper-persistent-data lvm2
配置安装源地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新缓存
yum makecache fast
安装docker引擎
yum install -y docker-ce
启动docker
service docker start
查看docker版本号
docker version
从远程仓库下载hello-world镜像
docker pull hello-world
docker run hello-world
阿里云docker镜像加速
在阿里云的容器镜像服务中,有一个镜像加速下载的功能
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://[每个用户不一样].mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
测试下载速度
// 下载tomcat镜像
docker pull tomcat
docker执行流程
docker 命令
#docker镜像拉取
docker pull 镜像名[:tags]
# 查看镜像列表
docker images
# 创建容器,启动运行
docker run 镜像 // 相当于 docker create 镜像名 和 docker start 容器id两个命令
# 查看正在运行的镜像列表
docker ps [-a]
#删除容器
docker rm [-f ] 容器id
# 删除镜像
docker rmi [-f] 镜像名[:tags]
查询镜像及版本
查询地址:https://hub.docker.com/
输入要pull的镜像名称,比如tomcat
在查询出的列表中点击第一个tomcat,选择tomcat8的tag
执行命令
docker pull tomcat:9.0.41-jdk8-openjdk-buster
docker宿主机与容器通信
端口映射
# 前面的端口号是宿主机端口号,后面是容器端口号
docker run -p 8000:8080 tomcat
后台运行
后台运行tomcat
docker run -p 8000:8080 -d tomcat
停止运行
停止tomcat运行
docker stop [容器id]
docker rm [容器id]
强制移除容器
docker rm -f [容器id]
删除镜像
dicjer rmi [-f] 镜像名[:版本]
容器内执行命令
docker exec [-it] 容器id 命令
-it:已交互方式执行命令
# 进入容器交互命令
docker exec -it sdf324r3wef /bin/bash
# 退出容器交互命令
exit
Docker生命周期
自定义镜像
dockfile是镜像描述文件,docker根据dockfile进行镜像的构建工作
创建web目录及index.html
创建web目录,目录名称为/usr/local/docker/docker-web
创建/usr/local/docker/docker-web/index.html
创建dockerfile
vi /usr/local/docker/Dockerfile
# 设置基准镜像
From tomcat:latest
# 作者
MAINTAINER sywh.org
# 创建并设置工作目录
WORKDIR /usr/local/tomcat/webapps
# 将当前dockerfile目录下的docker-web复制到工作目录下面
ADD docker-web ./docker-web
# 使用80端口号启动
#EXPOSE 80
创建镜像
docker build -t sywh.org/mytomcat:1.0 /usr/local/docker
查看镜像
docker images
可以看到已经创建好新的镜像了
根据新镜像生成容器并运行
docker run -d -p 8001:8080 sywh.org/mytomcat:1.0
镜像分层
镜像创建过程中会生成一个临时容器(只能用于镜像构建),每执行一步都会记录一个临时容器ID(快照),如果Dockfile执行的命令前面几步基本不变,就会使用临时容器ID快照缓存,不会再次创建临时容器快照。
Dockerfile命令
RUN
RUN 在镜像构建时执行
# shell命令格式,子shell进程执行命令
RUN yum install -y vim
# EXEC命令格式,会用EXEC进程替换当前进程(官方推荐)
RUN [ "yum","install","-y","vim" ]
Entrypoint 定参
容器启动时执行的命令,在dockerfile中,最后一个Entrypoint命令会被执行,不能被docker启动时的参数覆盖,可以与CMD联合使用,替换部分命令参数
CMD 传参
dockerfile的最后一个CMD命令才会被执行,如果在容器启动命令后面追加cmd命令,dockerfile中的CMD命令就会被启动时传入的命令覆盖,同样推荐使用EXEC命令执行
Entrypoint 和 CMD联合使用
FROM centos
ENTRYPOINT ["ps"]
CMD ["-ef"]
生成镜像后,执行容器启动命令 docker run mycentos
会执行ps -ef
命令
生成镜像后,执行容器启动命令 docker run mycentos -aux
会在容器运行时执行 ps -aux
命令,可以以bsd格式输出
容器间单向通信(宿主机内部)
查看docker容器相关信息
docker inspect [容器id]
不建议使用ip地址通信
使用link创建单向通信
1.创建database容器
docker run -d --name database -it centos /bin/bash
2.创建tomcat容器,并连接上database
docker run -d --name tomcat01 --link database tomcat
3.进入tomcat01容器
docker exec -it f9409dedc471 /bin/bash
4.查看是否可以ping通
基于bridge的容器间双向通信(宿主机内部)
查看docker网络服务
docker network ls
新建网桥
docker network create -d bridge my_bridge
容器和网桥绑定
//docker run -d --name database -it centos /bin/bash
//docker run -d --name tomcat01 tomcat
docker network connect my_bridge database
docker network connect my_bridge tomcat01
进入tomcat01容器,看看能否ping通database
docker exec -it eeaf6ffdf66a /bin/bash
ping database
可以看到,现在tomcat01已经可以ping通database容器了
Volume容器间数据共享
使用-v进行数据挂载
docker run -d -p 8002:8080 --name tomcat02 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
使用共享容器挂载
1.创建共享容器
docker create --name volume_webpage -v /usr/webapps:/usr/local/tomcat/webapps tomcat /bin/true
2.共享容器挂载点
docker run --name tomcat03 -p 8003:8080 --volumes-from volume_webpage -d tomcat
docker-compose容器编排工具
单机多容器部署工具
通过yml文件定义部署规则
1.下载安装文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2.设置运行权限
sudo chmod +x /usr/local/bin/docker-compose
使用docker-compose快速安装wordpress
- 创建目录
mkdir /usr/wordpress
- 新建配置 vi /usr/wordpress/docker-compose.yml
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
3.在项目目录/usr/wordpress中运行docker-compose
docker-compose up -d
4.访问页面 192.168.56.9:8000