目录
Docker
认识docker
解决开发、测试、生产环境有差异的问题
如何解决
- 将应用、依赖、函数库、配置一起打包,形成可移植镜像,可以迁移到任意Linux操作系统
- 应用运行在容器中,使用沙箱机制,相互隔离
快速交付应用、运行应用的技术(优势)
启动、移除都可以通过一行命令完成,方便快捷
Docker和虚拟机的区别
- docker是一个系统进程;虚拟机是在操作系统中的操作系统
- docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般
镜像和容器
- 镜像:将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起
- 容器:镜像中的应用程序运行后形成的进程就是容器
DockerHub
一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry
Docker架构
- 服务端:接收命令或远程请求,操作镜像或容器
- 客户端:发送命令或者请求到Docker服务端
安装Docker
(https://docs.docker.com/engine/install/centos/)
1.如果之前有安装过docker,可以进行卸载
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.安装一些依赖工具
- yum install -y yum-utils
- 修改yum源
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
systemctl status docker
systemctl start docker
systemctl stop docker
systemctl restart docker
6.配置阿里云的镜像加速器
- 安装好docker以后,在docker中下载镜像,从dockerhub中下载,速度比较,一般配置aliyun的镜像加载器;
- 访问地址 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
- 登录阿里云
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://72myvpdh.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
spring boot项目制作成镜像
Dockerfile 文本文件,可以编写命令
docker可以根据这些命令创建镜像
- 编写Dockerfile文件
- spring boot项目打成jar包
- docker build -t 镜像名称 .
Docker的基本操作
镜像操作
镜像名称
- 一般分两部分组成:[repository]:[tag]
- 没有指定tag时,默认是latest,代表最新版本的镜像
镜像命令
构建镜像:docker build
拉取镜像:docker pull 镜像名
推送镜像:docker push 镜像名
查看镜像:docker images
保存镜像:使用docker save导出镜像到磁盘
docker save -o [保存的目标文件名称] [镜像名称]
例子:docker save -o nginx.tar nginx:latest
导入镜像:使用docker load加载镜像
docker load -i nginx.tar
删除本地的nginx镜像:docker rmi nginx:latest
容器操作
docker run:创建并运行一个容器,处于运行状态
docker run --name 容器名 -p 8080:80 -d nginx(镜像)
docker run :创建并运行一个容器
--name : 给容器起一个名字,比如叫做mn
-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
- nginx:镜像名称,例如nginx
docker pause:让一个运行的容器暂停
docker unpause:让一个容器从暂停状态恢复运行
docker stop:停止一个运行的容器
docker start:让一个停止的容器再次运行
docker rm:删除一个容器
-f 容器名
docker logs
查看容器日志的命令
添加 -f 参数可以持续查看日志
docker ps
查看容器状态
-a 查看所有容器,包括已经停止的
三个状态
运行:进程正常运行
暂停:进程暂停,CPU不再运行,并不释放内存
停止:进程终止,回收进程占用的内存、CPU等资源
进入容器,修改文件
进入容器:docker exec -it 容器名 bash
docker exec :进入容器内部,执行一个命令
-it : 给当前进入的容器创建一个标准
输入、输出终端,允许我们与容器交互
容器名:要进入的容器的名称
bash:进入容器后执行的命令,bash是一个linux终端交互命令快捷方式:docker exec -it 容器名 容器客户端(eg:redis-cli)
进入nginx的HTML所在目录 :cd /usr/share/nginx/html
修改index.html的内容:sed -i -e 's#Welcome to nginx#xx欢迎您#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html
数据卷(容器数据管理)
解决容器与数据(容器内文件)耦合带来的后果
不便修改
数据不可复用
升级维护困难
作用
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
是一个虚拟目录,指向宿主机文件系统中的某个目录
数据集操作命令
docker volume [COMMAND]
create 创建一个volume
inspect 显示一个或多个volume的信息
ls 列出所有的volume
prune 删除未使用的volume
rm 删除一个或多个指定的volume
挂载数据卷
通过 -v 参数来挂载一个数据卷到某个容器内目录
docker run \
--name mn \
-v html:/root/html \
-p 8080:80
-d \
nginx \注意这里:
-v html:/root/html :把html数据卷挂载到容器内的/root/html这个目录中
目录挂载与数据卷挂载的语法是类似
- -v [宿主机目录]:[容器内目录]
- -v [宿主机文件]:[容器内文件]
Docker-compose
利用compose文件一次性创建多个容器
- 下载docker-compose------>/usr/local/bin---->修改权限
- 编写docker-compose.yml
- docker-compose up -d
Docker Compose安装
docker-compose安装流程
- 下载:https://github.com/docker/compose
- 上传到linux服务器
- 将docker-compose命令移动都/usr/local/bin下:mv docker-compose /usr/local/bin
- 修改权限:chmod 777 /usr/local/bin/docker-compose
docker-compose文件的内容
version: '3'
services:
mysql:
image: mysql:5.7.25
container_name: mysql
ports:
- 3307:3306
volumes:
- "/tmp/mysql/conf:/etc/mysql"
- "/tmp/mysql/data:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: "123456"
redis:
image: redis:latest
container_name: redis
ports:
- 6380:6379
私有镜像仓库
镜像仓库概念
镜像仓库分类:公共 私有
安装私有仓库
docker pull registry
创建容器
镜像上传私有仓库
- 打标记:docker tag 本地镜像名称 标记名称(私有仓库地址/镜像名称)
- 推送:docker push 标记名称(私有仓库地址/镜像名称)
从私有仓库拉取镜像
拉取镜像:docker pull 私有仓库地址/镜像名称
搭建私有镜像仓库
方式1
安装不带图形界面的
1.拉取镜像
https://hub.docker.com/_/registry
docker pull registry
2.创建容器
docker run -d --restart=always --name registry -p 5000:5000 -v registry-data:/var/lib/registry registry
3.添加信任
私有镜像仓库采用的是http协议,默认不被Docker信任,所以需要做一个配置
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.200.128:5000"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker
4.访问私服查看管理镜像
http://YourIp:5000/v2/_catalog
方式2
安装有图形界面的镜像私服
1.创建docker-compose.yml文件
2.编写内容
version: '3.0' services: registry: image: registry volumes: - ./registry-data:/var/lib/registry ui: image: joxit/docker-registry-ui:static ports: - 8080:80 environment: - REGISTRY_TITLE=传智教育私有仓库 - REGISTRY_URL=http://registry:5000 depends_on: - registry
3.执行文件
docker-compose up -d
私服采用的是http协议,默认不被Docker信任,所以需要做一个配置
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker
访问私服的管理控制台
http://192.168.200.130:8080/