大项目组件多,运行环境复杂
DockerRegistry: 镜像托管服务器,DockerHub、阿里云镜像
Docker安装和配置
systemctl enable docker # 开机自启
service start docker
在命令后加上--help
就能打开帮助文档
docker pull nginx[:tag] # 拉取镜像,不指定版本就自动拉取最新版,tag为latest
docker images # 查看镜像
docker save -o nginx.tar nginx:latest # 保存镜像到tar压缩文件,-o是output,后面跟要保存到的文件名
docker rmi nginx:latest# 删除镜像
docker load -i nginx.tar# 加载刚刚保存的镜像,-i是input,后面跟镜像压缩包文件名
docker tag nginx:latest mynginx:1.0 # 给一个镜像打标签为mynginx:1.0
容器一开始是完全隔离的,端口映射就是暴露一个接口(可以理解成和宿主机之间接了条通道,只有宿主机能把请求给它)
容器端口一般取决于应用本身很少变化,宿主机端口可以任意指定可用的
具体怎么启动建议在DockerHub中搜索
docker run --name mynginx -p 80:80 -d nginx
默认只能查看到未被停止的,加-a
能看到所有
docker ps
docker logs mynginx # 查看日志
docker logs -f mynginx # 持续跟踪显示日志,-f=follow
实际工作中不建议在容器内修改文件
docker exec -it mynginx bash
docker容器里有一套自己的简易文件系统
找到nginx的html页面并打开查看
cd /usr/share/nginx/html/
cat index.html
修改html内容
sed -i 's#Welcome to nginx#Hello World#g' index.html
sed -i 's##docker stop mynginx
docker start mynginx
docker rm mynginx # 要先停止容器
docker rm -f mynginx # 强制删除
docker volume create myvolume
docker volume ls
docker volume inspect myvolume
docker volume prune
docker volume rm myvolume
在创建容器的时候通过-v
参数将一个数据卷挂载到某个容器目录,如果没有这个数据卷会自动创建一个
docker run\
--name mn\
-v myvolume:/usr/share/nginx/html\ # 把myvolume数据卷挂载到容器内的/usr/share/nginx/html这个目录上
-p 80:80\
nginx
也可以直接把宿主机目录挂载到某个容器目录
可以基于Compose文件快速部署分布式应用,无需手动逐个创建和运行容器
Compose文件是个文本文件夹,通过指令定义集群中每个容器如何运行,内容约等于多个docker run的集合
详情参考官网DockerCompose文档
安装dockerCompose
使用DockerCompose部署微服务
最好先自己部署好Nacos再一键部署其他微服务,否则找不到地方注册
仓库也可以自己建私有仓库
搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。
官网地址:https://hub.docker.com/_/registry
Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
搭建方式比较简单,命令如下:
docker run -d \
--restart=always \
--name registry \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
registry
命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。
访问http://YourIp:5000/v2/_catalog 可以查看当前私有镜像服务中包含的镜像
使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:
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
我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker