Docker使用
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
Docker
镜像ImageDocker镜像image相当于一个root文件系统比如官方镜像Ubuntu16.04就包含了一套完整的ubuntu16.04最小系统的root文件系统
容器container镜像image和容器container的关系就像是面向对象程序设计中的类和对象一样镜像是静态的定义容器是竞相运行中的实体。通气可以被创建、启动、停止、删除、暂停等。
仓库repository仓库可以看成一个代码控制中心用来保存镜像。
1、yum安装
yum update
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install docker-ce
2、配置镜像加速器
搜阿里云。。。
3、镜像相关命令
docker images 查看本地镜像
docker search +名字 搜索镜像
docker pull 下载镜像
docker rmi + imageid 删除镜像
容器相关命令
#1.查看容器
docker ps #查看正在运行的容器
docker ps -a #查看所有容器的使用情况
docker ps -aq #查看所有容器的id
通过STATUS可以查看up是正在运行exit是已经退出
#2.创建容器
docker run -it --name=c1 redis:latest /bin/bash
参数-i 让容器保持运行结合-t使用容器创建后自动进入容器中退出容器后容器自动关闭
-t 为容器分配一个伪终端
输入此命令即可进入生成的redis容器中就像是刚下载的redis软件并可以进行一系列操作。
exit 退出客户端后容器自动关闭
docker run -id --name=c2 redis:latest
参数-d 这个容器后台运行但不进入终端需使用3中的进入容器方法进入终端。退出容器后终端关闭后台始终保持运行
exit 退出客户端后容器不会关闭
-it 交互式容器随开随用随用随关
-id 守护式容器你走任你走你走我不关
#3.进入容器
docker exec -it c2 /bin/bash
使用上述命令进入终端
#4.启动容器
docker start c2
关闭的容器被开启
#5.停止容器
docker stop c2
关闭正在启动的c2容器
#6.删除容器
docker rm c2 #删除c2容器
docker rm `docker ps -aq` #删除所有容器
开启中的容器不能删除
#7.查看容器信息
docker inspect c2
4、docker容器的数据卷
宿主机目录目录A被称为数据卷
容器目录目录B
将目录A挂载到目录 B上那么两者目录中的文件会发生同步
一个容器可以被多个数据卷挂载
一个容器也可以挂载多个数据卷
数据卷的作用
数据持久化
数据交互
数据卷的功能
容器删除后其产生的数据可以保存下来
容器可以与外部机器进行数据交互
容器之间可以进行数据交互
配置数据卷
docker run ... -v 宿主机目录文件容器内目录文件
注意事项1.目录必须是绝对路径
2.如果目录不存在会自动创建
3.可以挂载多个数据卷
4.多个容器可以挂载一个数据卷实现数据卷的
数据卷、容器目录一对一示例
docker run -it --name=c1 -v /root/data/redis_data:/root/data/ redis:latest /bin/bash
#创建了一个redis镜像的容器容器名称为c1 容器的/root/data/目录挂载到宿主机的/root/data/redis_data目录上
一个容器两个数据卷示例
docker run -it --name=c1 -v /root/data/redis_data1:/root/data/ -v /root/data/redis_data2:/root/data/ redis:latest /bin/bash
#创建了一个redis镜像的容器容器名称为c1 容器的/root/data/目录挂载到宿主机的/root/data/redis_data目录及/root/data/redis_data2上
数据卷容器
Container3与宿主机的数据卷进行挂载Container1与Container2挂载到Container3上Container3容器挂掉不妨碍Container1和Container2进行数据交互。Container3就被称作数据卷容器
示例
# 1.创建启动c3数据卷容器使用-v参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
# 2.创建启动c1、c2容器使用 --volumes-from参数 设置数据卷
docker run -it --name=c1 --volume-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volume-from c3 centos:7 /bin/bash
查看数据卷容器的数据卷地址
docker inspect c3
docker inspect c2
docker inspect c1
# 翻到当前位置的mounts字典块中其中的source字段就是数据卷所在位置
5、docker应用部署
在docker容器中部署MySQL并通过外部mysql客户端操作MySQL server。
搜索mysql镜像
拉取mysql镜像
创建容器
操作容器中的mysql
#1.查看容器
docker search mysql
#2.下载镜像
docker pull mysql:5.6
#3.创建容器
[root@localhost Hart_docker] docker run -id -p 3306:3306 --name=c_mysql \
-v /root/v_docker/mysql/conf:/etc/mysql/conf.d \
-v /root/v_docker/mysql/logs:/logs \
-v /root/v_docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
#参数
-p 指定映射端口将c_mysql容器中的3306端口映射到宿主机的3307外部机器可以通过访问宿主机的3307端口实现访问c_mysql容器的3306
#4.进入容器操作mysql
docker exec -it c_mysql /bin/bash
#5.容器中使用命令进入mysql客户端
mysql -uroot -p
#创建部分数据省略
#6.通过别的主机进行远程连接c_mysql容器
mysql root@10.0.2.80 -P 3307 -p
6、dockerfile
Dockerfile是一个文本文件包含了一条条的指令每一条指令构建一层基于基础镜像最终构建出一个新的镜像。
示例
自定义centos
需求1.默认登录路径为/usr
2.可以使用vim
实现步骤
定义父类镜像FROM centos:7
2.定义作者信息 MAINTAINER vicente@cloudwise.com
3.执行安装vim命令RUN yum install -y vim
4.定义默认的工作目录WORKDIR /usr
5.定义容器启动执行的命令CMD /bin/bash
#1.创建一个目录存放dockerfile文件的目录
mkdir docker-files
#2.编辑centos_dockfile
vim centos_dockfile
#文件内容
FROM centos:7
MAINTAINER vicente<vicente@cloudwise>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
#3.通过dockerfile文件构成自己镜像
docker build -f ./centos_dockfile -t app .
7、Docker服务编排
微服务架构的应用系统中一般包含若干个微服务每个微服务一般都会部署多个实例如果每个微服务都要手动启停维护的工作量会很大。
所以有了服务编排
服务编排按照一定的业务规则批量管理容器
docker compose使用步骤
利用dockerfile定义运行环境镜像
使用docker-compose.yml定义组成应用的各服务
运行docker-compose up 启动应用
安装docker compose
#下载
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose --version
删除docker compose
rm /usr/local/bin/docker-compose
使用docker compose编排nginx+springboot项目
#1.创建docker-compose目录
mkdir docker-compose
cd docker-compose
#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"
#3.创建./nginx/conf.d目录
mkdir -p nginx/conf.d
cd nginx/conf.d
#4.创建Hart.conf文件对项目地址反向代理
server {
listen 80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
#5.在 docker-compose目录下使用docker compose启动容器
docker-compose up
#6.测试访问
10.0.2.79/hello
8、docker私有仓库
搭建私有仓库
#1.拉取私有仓库镜像
docker pull registry
#2.启动私有仓库容器
docker run -id --name= -p 5000:5000 registry
#3.测试是否成功
前往http://10.0.2.79:5000/v2/_catalog,查看是不是有内容
#4.修改下面文件
vim /etc/docker/daemon.json
"insecure-registries":["10.0.2.79:5000"]
#重启docker服务
systemctl restart docker
docker start registry
将镜像上传至私有仓库
#1.标记镜像为私有仓库的镜像
docker tag centos:7 10.0.2.79:5000/centos:7
#2.上传标记的镜像
docker push 10.0.2.79:5000/centos:7
在私有仓库拉取镜像
docker pull 10.0.2.79:5000/centos:7