Docker学习视频https://www.bilibili.com/video/BV1LQ4y127n4?p=42&vd_source=8665d6da33d4e2277ca40f03210fe53a
文档资料:
链接:https://pan.baidu.com/s/1P_Ag1BYiPaF52EI19A0YRw?pwd=d03r
提取码:d03r
Docker 其他笔记
服务器容器化-docker(全)_深林中的书海的博客-CSDN博客
一 初始Docker
(一) 什么是Docker
(二) 解决兼容问题
(三) Docker和虚拟机的差异
(四) Docker架构
- 可以理解为: 镜像就是安装包 容器就是程序 注意:一个镜像可以打包多个容器
二 Docker 安装
(一) 安装Docker和启动 (方法一)
1.1 卸载
如果之前安装过旧版本的Docker,可以使用下面命令卸载:
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine \docker-ce
1.2 安装
首先需要大家虚拟机联网,安装yum工具
yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken
然后更新本地镜像源:
# 设置docker镜像源
yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repoyum makecache fast
然后输入命令:
yum install -y docker-ce
docker-ce为社区免费版本。稍等片刻,docker即可安装成功。
1.3 启动
Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!
启动docker前,一定要关闭防火墙后!!
启动docker前,一定要关闭防火墙后!!
启动docker前,一定要关闭防火墙后!!
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
通过命令启动docker:
systemctl start docker # 启动docker服务systemctl stop docker # 停止docker服务systemctl restart docker # 重启docker服务
然后输入命令,可以查看docker版本:
docker -v
1.4 配置镜像加速
docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档: 容器镜像服务 (aliyun.com)
三 CentOS7安装DockerCompose
2.1.下载
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/
目录也可以。
2.2.修改文件权限
修改文件权限:
# 修改权限
chmod +x /usr/local/bin/docker-compose
2.3.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
三.Docker镜像仓库
搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。
官网地址:https://hub.docker.com/_/registry
3.1.简化版镜像仓库
Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
搭建方式比较简单,命令如下:
x 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 可以查看当前私有镜像服务中包含的镜像
3.2.带有图形化界面版本
使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:
version: '3.0'
services:registry:image: registryvolumes:- ./registry-data:/var/lib/registryui:image: joxit/docker-registry-ui:staticports:- 8080:80environment:- REGISTRY_TITLE=传智教育私有仓库- REGISTRY_URL=http://registry:5000depends_on:- registry
3.3.配置Docker信任地址
我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker
四 Docker的基本命令
(一).镜像相关命令
1.1 镜像地址
Docker Hub
1.2 基础命令
docker --help
- docker images --help 查看镜像命令
- docker xx --help 查看xx命令介绍
- build build从Dockerfile构建映像
- history history显示镜像的历史记录
- import import从tarball导入内容以创建文件系统映像
- inspect inspect显示一个或多个镜像的详细信息
- load load从tar存档或STDIN加载镜像
- ls ls列出镜像
- prune prune删除未使用的镜像
- pull pull从注册表中提取镜像或存储库
- push 推送将镜像或存储库推送到注册表
- rm rm删除一个或多个镜像
- save save将一个或多个镜像保存到tar存档(默认情况下流式传输到STDOUT)
- tag 标记创建引用SOURCE_IMAGE的标记TARGET_IMAGE
- docker pull xx (dockere pull nginx) 拉取镜像
- docker rmi xx 镜像
1.3 案例 docker (save load) 镜像导出磁盘,然后load加载回来
1.4 save导出
-
docker save -o nginx.tar nginx:latest
1.5 load加载
- docker load --help
- docker load -i nginx.tar
(二) 容器相关命令
1.1 基础命令
- docker run 运行
- docker pause 暂停
- docker unpause 停止暂停
- docker stop 停止
- docker start 启动
- docker ps 仅查看容器运行状态的容器
- docker ps -a 查看所有容器状态
- docker exec 进入容器执行命令
- docker logs 查看容器运行日志 -f 可持续查看 --tail=1000 查看最后1000行 如 docker logs -f --tail =1000 my-nginx 就是持续查看nginx日志的最后1000行
- docker rm 删除指定容器
(三) 案例一 nginx启动与修改命令
1.2 案例 nginx 启动命令
docker run --name my-nginx -d -p 8080:80 nginx
1.3 案例 进入nginx修改文件
- docker exec: 进入容器内部 执行命令
进入nginx容器
docker exec -it my-nginx bash
sed -i 's#Welcome to nginx#无敌的Nginx#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html
(四) 案例二 redis 启动与进入
4.1 官网
redis - Official Image | Docker Hub
4.2 运行redis容器
- docker run --name some-redis -d redis redis-server
进入redis
- docker exec -it myredis bash
- redis-cli
直接进入redis
- docker exec -it myredis redis-cli
测试redis
- set num 666
- key *
五 Docker-数据卷的学习
(一) 数据卷命令
1.1 操作数据卷
1.2 小案例
(1) 创建数据卷
docker volume create html
(2) 查看数据卷
docker volume ls
(3) 查看数据卷详细信息
docker volume inspect html
1.3 总结
(二) 使用Docker-使用数据卷挂载到容器当中
2.1 -v 挂载
2.2 挂载案例操作 --Nginx (-v volume : 容器内目录 宿主机-系统生成对应目录)
2.3 挂载案例 --Mysql (-v 文件/目录 挂载到对应的卷)
docker run \--name mysql \-v /temp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \-v /tmp/mysql/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 \-p 3306:3306 \-d mysql:5.7
2.4 总结
六 Docker-自定义镜像结构 --Dockerfile
(一) 镜像的结构
1.1 介绍
1.2 总结
(二) 自定义镜像 --Dockerfile
2.1 什么是Dockerfile
官网
Dockerfile reference | Docker Docs
(三) 案例 基于Ubuntu镜像 构建一个新镜像, 运行一个java项目
3.1 说明
dockerfile 文件
# 指定基础镜像
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
3.2 构建镜像 docker build
- docker build -t name:tag dockerfile目录
- docker build -t
- javaweb 是名称
- 1.0 是版本
- "." 是dockerfile 所在的目录
docker build -t javaweb:1.0 .
3.3 启动容器
docker run --name web -p 8090:8090 -d javaweb:1.0
(四) 案例 基于java:8-alpine镜像 将一个java项目构建为镜像
4.1 制作自定义镜像
# 指定基础镜像
FROM java:8-alpine# 拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
4.2 启动容器
docker build -t javaweb:1.0 .
docker run --name web -p 8091:8090 -d javaweb:2.0
(五) 总结
七 DockerCompose
官方网站
Overview | Docker Docs
(一) 初识Compose
(二) 安装Compose
(1) 安装
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
(2) 修改权限
# 修改权限
chmod +x /usr/local/bin/docker-compose
(3) Base自动补全命令
这个不行用下面的
# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
(4) 总结
八 案例 部署 cloud-demo
(1) 部署
(2) 运行 docker-compose
docker-compose up -d
docker-compose up -d --build
(3) userervice启动失败 是因为nacos先启动
docker-compose restart gateway userservice orderservice
(4) 解决 报错问题
(4.1) docker-compose启动时unknown flag: --iidfile问题
docker -v 可以查看版本 docker-compose 1.29版本太高了
换成docker-compose-1.26 即可
链接:https://pan.baidu.com/s/1qg6BiRw0dhQC3XuVoYkXWQ?pwd=b9pm
提取码:b9pm
(4.2) 修改docker-compose 文件的数据库名称和数据库密码
数据库名称: cloud_order 和 cloud_user
密码: 123456
修改好后 : docker-compose up -d 重新执行
或者 docker-compose restart gateway userservice orderservice
如果执行还报错 就给镜像 容器全部删掉 重新 docker-compose -up -d 构建一下
(4.3) 数据库连接不上
DockerCompose部署微服务连接数据库报错的,
可以修改/cloud-demo/mysql/conf/hmy.cnf文件,末尾加一行skip-grant-tables
然后重启mysql容器,
docker exec -it yoursql bash 进入容器内部,
mysql -uroot -p直接登录mysql,可以不用密码登陆,敲回车即可.
use mysql; 确认库
然后修改密码,
UPDATE user SET authentication_string = password ( 'your password' ) WHERE User = 'root';
刷新权限 flush privileges;
再将hmy.cnf里加的那一行删掉就可以了.
九 Docker镜像仓库(中心)
(1) Docker镜像仓库
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 可以查看当前私有镜像服务中包含的镜像
(2) 带有图形化界面版本
使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:
version: '3.0'
services:registry:image: registryvolumes:- ./registry-data:/var/lib/registryui:image: joxit/docker-registry-ui:staticports:- 8080:80environment:- REGISTRY_TITLE=YOURS私有仓库- REGISTRY_URL=http://registry:5000depends_on:- registry
(3) 配置Docker信任地址
我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker
(4) 私有镜像添加镜像
重新tag本地镜像 前缀为 私有仓库地址: 192.168.1.100:8080
docker tag nginx:latest 192.168.1.100:8080/nginx:1.0
推送镜像
docker push 192.168.1.100:8080/nginx:1.0
拉去镜像
docker pull 192.168.1.100:8080/nginx:1.0