Docker学习笔记
- 1.初始Docker
* - 1.1解决不同组件依赖的兼容性问题
- 1.2安装Docker
- 1.3Docker架构
– - 1.4Docker换源,换成国内镜像
- 2.Docker命令
* - 2.1Docker服务相关命令
– - 2.2镜像相关命令
– - 2.3容器相关命令
– - 3.Docker应用部署
* - 3.1MySql部署
– - 3.2Tomcat部署
– - 3.3Nginx部署
– - 3.4Redis部署
– - 4.备份与迁移
- 5.Dockerfile(构建镜像)
* - 5.1Docker镜像原理与制作
– - 5.2DockerFile概念及作用
- 5.3案例1:定义dockerfile,发布springboot项目
– - 5.4案例2:自定义centos7镜像
– - 6.Docker服务编排
* - 6.1服务编排概念
- 6.2Docker Compose(服务编排工具)
- 6.3DockerCompose安装使用
- 6.4案例:DockerCompose编排Nginx+springboot项目
– - 7.Docker容器数据卷
* - 7.1数据卷的概念及作用
- 7.2配置数据卷
– - 7.3配置数据卷容器
– - 8.Docker私有仓库(管理自己的镜像)
* - 8.1搭建私有仓库(注意ip变化)
– - 8.2上传镜像到私有仓库
– - 8.3从私有仓库拉取镜像
- 9.Docker容器虚拟化与传统虚拟机比较
1.初始Docker
容器技术:解决软件跨环境迁移问题
解决
- 开发
- 测试
- 生产
环境之间差异,版本+代码
; 1.1解决不同组件依赖的兼容性问题
1.2安装Docker
命令行安装即可
1.3Docker架构
- 客户端:
- 服务端:镜像和容器
- 仓库Registry:DockerHUB
; 1.3.1镜像
将应用程序及其依赖、环境、配置打包在一起
1.3.2容器
镜像运行起来就是容器,一个镜像可以运行多个容器
1.4Docker换源,换成国内镜像
; 2.Docker命令
可参照菜鸟教程
2.1Docker服务相关命令
2.1.1启动Docker服务
systemctl start docker
2.1.2停止Docker服务
systemctl stop docker
2.1.3重启Docker服务
systemctl restart docker
2.1.4查看Docker服务状态
systemctl status docker
2.1.5开机启动Docker服务
systemctl enable docker
2.2镜像相关命令
; 2.2.1查看本地镜像
docker images
2.2.2搜索远程镜像
docker search redis
2.2.3拉取远程镜像
Docker HUB 拉取相关软件的镜像
docker pull redis:3.5(3.5版本号)
2.2.4删除本地镜像
docker rmi imageid
docker rmi redis:3.5(Image id 重复时)
删除所有镜像
docker remi docker images -q
2.3容器相关命令
2.3.1查看容器
docker ps
查看所有容器
docker ps -a
2.3.2创建容器
方式1
docker run -i -t --name=c1 redis
-i 保持容器运行
-t 容器退出后自动关闭
方式2
docker run -id --name=c2 redis
-d 守护,后台运行容器
-- name 为容器起名
2.3.3进入容器
docker exec -it c2 /bin/bash
2.3.4启动容器
docker start c1
2.3.5停止容器
docker stop c2
2.3.6删除容器
运行的容器不可以删除
docker rm c2(容器名称)
docker rm docker ps -aq
2.3.7查看容器信息
docker inspect c1
3.Docker应用部署
3.1MySql部署
; 3.1.1搜索MySQL镜像
docker search mysql
3.1.2拉取MySQL镜像
去DockerHUb
docker pull mysql:5.6
3.1.3创建容器,设置端口映射、目录映射
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3306:3306 \
--name=c_mysql
-v $PWD/conf:/etc/mysql/conf.d\
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
$PWD
:当前路径
docker run
:就是创建并运行容器
-- name mn
:给容器起个名字叫mn
-v $PWD/conf:/etc/mysql/conf.d
:将主机目录下conf/my.cnf挂载到容器的/etc/mysql/my.cnf 配置目录
-p 8080:80
:把宿主机的8080端口映射到容器内的80端口
-e MYSQL_ROOT_PASSWORD=123456
:初始化root密码
mysql:5.6
:镜像名称
3.1.4操作容器中的MySQL
docker exec -it c_mysql /bin/bash
登录mysql
mysql -uroot -p123456
3.2Tomcat部署
3.2.1搜索Tomcat镜像
docker search tomcat
3.2.2拉取Tomcat镜像
docker pull tomcat
3.2.3创建容器,设置端口映射、目录映射
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
-p 8080:8080
:将容器的8080端口映射到主机的8080端口
-v $PWD:/usr/local/tomcat/webapps
:将主机中当前目录挂载到容器的webapps
3.2.4操作容器中的Tomcat
使用外部机器访问Tomcat
; 3.3Nginx部署
3.3.1搜索Nginx镜像
docker search nginx
3.3.2拉取Nginx镜像
docker pull nginx
3.3.3创建容器,设置端口映射、目录映射
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
vim nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
创建容器
docker -run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
-p 80:800
:将容器的80端口映射到宿主机的80端口
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf
:将主机当前目录下的/conf/nginx.conf挂载到容器的:/etc/nginx/nginx.conf配置目录
-v $PWD/html:/usr/share/nginx/html
:将主机当前目录挂载到容器的/val/log/nginx日
3.3.4操作容器中的Nginx
外部访问Nginx即可
3.4Redis部署
3.4.1搜索Redis
docker search redis
3.4.2拉取redis
docker pull redis:5.0
3.4.3创建容器
docker run -id --name=c_redis -p 6379:6379 redis:5.0
3.4.4测试访问
redis-cli.exe -h 192.168.187.129 -p 6379
-h 192.168.187.129 宿主机的ip地址
4.备份与迁移
5.Dockerfile(构建镜像)
5.1Docker镜像原理与制作
5.1.1原理
复用
分层的文件系统
; 5.1.2制作镜像
docker commit 容器id 镜像名称:版本号
镜像不可以传输,可以将镜像转换成压缩文件
docker save -o 压缩文件名称 镜像名称:版本号
压缩文件还原成镜像
docker load -i 压缩文件名称
目录挂载的不生效
5.2DockerFile概念及作用
统一,开发、测试、运维的运行环境
更新详细语法说明,请参考官网文档:
https://docs.docker.com/engine/reference/builder
作用
; 5.3案例1:定义dockerfile,发布springboot项目
5.3.1springboot项目准备
; 5.3.2将项目打包
根据路径找到打好的文件
5.3.2将文件传输到虚拟机
- 参照别人安装Xshell教程安装
- 使用
rz
命令进行查看是否安装了lrzsz程序 - 如果没有安装,使用
yum -y install lrzsz
进行安装 - 输入
rz
进行文件上传
; 5.3.4将文件移动至dockerfiles目录下
如果没有目录docker-files,先进行创建
mkdir ~/docker-files
mv springboot-hello-0.0.1-SNAPSHOT.jar ./docker-files/
5.3.5编辑dockerfile将jar包添加到镜像中
- 定义父镜像:
FROM java:8
- 定义作者信息:
MAINTAINER jqqq007 <www.jqqq007.wkl></www.jqqq007.wkl>
- 将jar包添加到容器:
ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
- 定义容器启动执行的命令:
CMD java -jar app.jar
- 通过dockerfile 构建镜像:
docker build -f dockerfile文件路径 -t 镜像名称:版本
vim springboot_dockerfile 编辑一个文件
添加以上命令
执行,就可生成镜像
docker build -f ./springboot_dockerfile -t app .
查看镜像
通过镜像app,创建运行容器
docker run -id -p 9000:8080 app
访问
5.4案例2:自定义centos7镜像
要求:
- 默认登录路径为/usr
- 可以使用vim
5.4.1查看原来的centos7挂载目录
; 5.4.2查看原来的centos7是否带有vim
5.4.3开始自定义自己的centos7
创建一个dockerfile
vim centos_dockerfile
添加以下命令
FROM centos:7
MAINTAINER JQ<jq.cn>
RUN yum install -y vim
WORDIR /usr
CMD/bin/bash
RUN yum install-y vim
:执行安装vim命令
WORDIR /usr
:定义默认的工作目录
CMD/bin/bash
:定义容器启动执行的命令
5.4.4构建镜像自己的镜像
通过dockerfile 构建镜像: docker build -f dockerfile文件路径 -t 镜像名称:版本
docker build -f ./centos_dockerfile -t appcentos:1
5.4.5创建容器执行
; 6.Docker服务编排
6.1服务编排概念
; 6.2Docker Compose(服务编排工具)
DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/
6.3DockerCompose安装使用
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.0.1/docker-compose-uname -s
-uname -m
> /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -version
卸载dockerCompose
rm /usr/local/bin/docker-compose
6.4案例:DockerCompose编排Nginx+springboot项目
6.4.1创建docker-compose目录
mkdir docker-compose/
cd ~/docker-compose
6.4.2编写docker-compose.yml文件
vim docker-compose.yml
version: '3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
6.4.3创建./nginx/conf.d目录
mkdir -p ./nginx/conf.d
cd ./nginx/conf.d
6.4.4在./nginx/conf.d目录下编写itdocker.conf文件
vim itdocker.conf
server {
listen 80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
6.4.5在~/docker-compose目录下 使用dockers-compose 启动容器
cd ~/docker-compose
docker-compose up
6.4.6测试访问
192.168.56.10:80/hello
; 6.4.7错误:services.nginx Additional property app is not allowed
docker-compose up
services.nginx Additional property app is not allowed
此时一定要去检查docker-compose.yml书写格式,特别是缩进格式!
7.Docker容器数据卷
; 7.1数据卷的概念及作用
容器与虚拟机进行目录挂载
解决
- Docker容器删除后,数据还会存在
- Docker容器与外部机器之间进行文件交换
- 容器之间的数据交换
一个容器可以被多个容器进行同时挂载
一个容易也可以被挂载多个数据卷
7.2配置数据卷
- 目录必须是绝对路径
- 目录不存在可以自动创建
- 可以挂载多个数据卷
; 7.2.1挂载目录
docker run -it --name=c1 -v /root/data/:/root/data_container redis:3.5
挂载多个目录
docker run -it --name=c2 \
-v /root/data:/root/dedadasdad \
-v /root/data2:/root/dadssds
7.2.2多个容器挂载同一个数据卷
docker run -it --name=c1 -v /root/data/:/root/data_container redis:3.5
docker run -it --name=c2 -v /root/data/:/root/data_container redis:3.5
7.3配置数据卷容器
; 7.3.1配置
自动在宿主机分配一个文件
docker run -it --name=c3 -v /volume redis:3.5
docker run -it --name=c1 --volumes-from c3 redis:3.5
docker run -it --name=c2 --volumes-from c3 redis:3.5
8.Docker私有仓库(管理自己的镜像)
; 8.1搭建私有仓库(注意ip变化)
8.1.1拉取私有仓库镜像
docker pull registry
8.1.2启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
8.1.3打开浏览器 访问私有仓库
输入地址 https://私有仓库服务器ip:5000/v2/_catalog
看到{“repositories”:[]}表示私有仓库搭建成功
; 8.1.4修改deamon.json
vim /etc/docker/daemon.json
{"insecure-registries": ["私有仓库服务器ip:5000"]}
8.1.5重启docker 服务与registry仓库
systemctl restart docker
docker start registry
8.2上传镜像到私有仓库
; 8.2.1标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器ip:5000/centos:7
8.2.2上传标记的镜像
docker push 私有仓库服务器ip:5000/centos:7
8.3从私有仓库拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7
9.Docker容器虚拟化与传统虚拟机比较
Original: https://blog.csdn.net/qq_45498432/article/details/127694965
Author: 学无止境DayDayUp
Title: Docker学习笔记
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/653378/
转载文章受原作者版权保护。转载请注明原作者出处!