文章目录
一、基本介绍
二、环境配置
三、Docker基本操作
3.1 镜像操作
dockerHub官网:https://hub.docker.com
下面演示的是保存镜像为压缩包、删除镜像、加载镜像的操作:
3.2 容器操作
3.2.1 演示命令run、ps、logs
以上便可通过:域名:宿主机端口 访问 例如:192.168.150.101:80访问得到以下结果
阿里云linux云服务器公网地址无法访问最常见两个问题解决方法:请参见
3.2.2 演示命令exec、rm、exit(退出)
- 查看容器状态:
docker ps
添加-a参数查看所有状态的容器 - 删除容器:
docker rm
不能删除运行中的容器,除非添加 -f 参数 - 进入容器:
命令是docker exec -it [容器名] [要执行的命令]
exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的
3.3 数据卷
3.3.1 直接挂载
3.3.2 宿主机挂载
创建一个mysql容器如下
docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25
此时在data目录下可以看到文件,并且在navicat也可以看见数据库文件
3.3.3 两种方式的对比
四、Dockerfile自定义镜像
镜像是将应用程序程序需要的系统函数库、环境、配置、依赖打包而成。镜像是分层结构,每层称为一个Layer。
方式一
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
方式二:利用其他人制作好的镜像(如java:8-alpine)
# 指定基础镜像
FROM java:8-alpine
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
五、Docker-Compose
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/
5.1 CentOS7安装DockerCompose
- 下载
Linux下需要通过命令下载:
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
如果下载速度较慢,或者下载失败,可以使用课前资料提供的docker-compose文件:上传到/usr/local/bin/
目录也可以。
- 修改文件权限
# 修改权限
chmod +x /usr/local/bin/docker-compose
- Base自动补全命令:
# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
如果这里出现错误,需要修改自己的hosts文件:
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
5.2 案例
docker-compose
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
userservice:
build: ./user-service
orderservice:
build: ./order-service
gateway:
build: ./gateway
ports:
- "10010:10010"
六、Docker镜像服务
6.1 配置安装
搭建镜像仓库可以基于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 可以查看当前私有镜像服务中包含的镜像
- 带有图形化界面版本
首先要配置Docker信任地址
我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:
注意:["192.168.150.101:8080"]不能写成["http:/192.168.150.101:8080"],因为registry1.3以上不支持http
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker
然后使用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
接下来创建文件并启动服务
mkdir registry-ui # 创建目录
cd registry-ui/ # 进入文件夹
touch docker-compose.yml # 创建文件,然后将上述内容复制进去
docker-compose up -d # 创建容器
然后通过 http://服务器地址:8080/
访问,如下
将nginx:latest镜像推送到私有仓库中
# 推送镜像到私有镜像服务必须先tag,步骤如下:
# 1.重新tag本地镜像,名称前缀为私有仓库的地址:192.168.150.101:8080/
docker tag nginx:latest 192.168.150.101:8080/nginx:1.0
# 2.推送镜像
docker push 192.168.150.101:8080/nginx:1.0
# 3. 拉取镜像
docker pull 192.168.150.101:8080/nginx:1.0
一定要注意:如果使用的是云服务器部署注意在安全组中将5000和8080端口打开
上述全过程:
# 1.修改/etc/docker/daemon.json 添加 {insecure-registries":["192.168.150.101:8080"]}
# 2.重启docker
systemctl daemon-reload
systemctl restart docker
# 3.创建文件夹和配置文件yml
mkdir /tmp/registry-ui
cd /tmp/registry-ui
touch docker-compose.yml
# 4.在配置文件中添加内容
# 5.启动容器
docker-compose up -d
# 6.拉取nginx,创建本地镜像,并推送
docker pull nginx
docker tag nginx:latest 39.107.236.163:8080/nginx:1.0
docker push 39.107.236.163:8080/nginx:1.0
# 7.停止、删除所有容器,删除所有镜像
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi -f $(docker images -q)