Docker与微服务实战2022:基础篇
- Docker与微服务实战2022:高级篇
目录
- 一、简介
- 二、安装docker
- 三、操作命令
- 3.1、帮助命令
- 3.2、镜像命令
- 3.3、容器命令
- 四、镜像分层
- 五、本地镜像推送到阿里云
- 1、阿里云镜像服务操作
- 2、实操
- 六、本地镜像推送到私有库
- 七、容器数据卷
- 1、设置root权限
- 2、挂载目录
- 3、设置容器读写权限
- 4、容器卷之间的继承(实际为复用-v指令)
- 八、安装常用软件(tomcat,mysql,redis,nginx)
- 8.1、tomcat
- 8.2、mysql
- 8.3、Redis
- 8.4、Nginx
一、简介
1.1、docker是什么
- Docker是基于Go语言实现的云开源项目。
- Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。
Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
1.2、为什么要用docker
- docker有着比虚拟机更少的抽象层
- docker利用的时宿主机的内核,而不需要加载操作系统内核
二、安装docker
1、安装
# 1、安装gcc相关
yum -y install gcc
yum -y install gcc-c++# 2、安装开发utils
yum install -y yum-utils# 3、安装阿里云仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 4、更新yum软件包索引
yum makecache fast# 5、安装dockers engine
yum install -y docker-ce docker-ce-cli containerd.io# 6、启动并设置开机自启动
systemctl start docker
systemctl enable docker
2、配置阿里云镜像
阿里云镜像地址
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://aikv7hec.mirror.aliyuncs.com"]
}
EOFsudo systemctl daemon-reload
sudo systemctl restart docker
3、测试
docker run hello-world # 运行
docker ps # 查看正在运行的容器
docker ps -a # 查看历史运行的容器
docker rm id # 删除容器
docker images # 查看所有镜像
docker rmi imageId # 删除镜像
三、操作命令
3.1、帮助命令
systemctl .... dockerstart # 开启stop # 停止restart # 重启status # 状态enable # 开机自启
docker info
docker --help
docker xxx --help
3.2、镜像命令
# 1、搜索
docker search xx # 查询
docker search --limit 5 xx # 查询前5条# 2、拉取
docker pull xx # 拉取最新
docker pull xx:version # 拉取对应版本# 3、查看镜像
docker images -a # 列出本地所有镜像-q # 只显示镜像id# 4、查看镜像/容器/数据卷所占空间
docker system df# 5、删除
docker rmi xx # 删除
docker rmi -f xx # 强制删除
docker rmi `docker images -q` #强制删除所有
3.3、容器命令
1、运行
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
--name xx # 为容器指定一个名称
-d # 后台运行容器并返回容器id,也即启动守护式容器-i # 交互模式运行容器,通常与-t使用
-t # 为容器分配一个伪输入终端,通常与-i使用# 也即交互模式启动容器(前台有伪终端,等待交互)-P # 指定端口映射---随机
-p # 指定端口映射---指定 -d # 后台守护式运行# 测试:启动ubuntu并进入容器内部
docker run -it ubuntu /bin/bash
2、展示容器
docker ps # 列出运行中的容器-a # 列出所有容器-l # 显示最近创建-n 5 # 显示最近5个-q # 只显示id
3、退出容器
exit # 容器停止
ctrl+p+q #不停止退出
4、开关操作
docker start id/name # 启动已停止的容器
docker restart id/name # 重启
docker stop id/name # 停止
docker kill id/name # 强制停止
5、删除
docker rm id # 删除
docker rm -f id # 强制删除
docker rm -f $(docker ps -aq) #强制删除所有
6、查看容器信息
docker logs id # 查看日志
docker top id # 查看容器内运行的进程
docker inspect id # 查看容器内部细节
7、交互模式进入容器
docker exec -it id /bin/bash # exit退出不会停止容器
docker attach id # 会停止容器# 进入redis服务
docke exec -it id redis-cli
8、从容器拷贝文件到主机
docker cp id:容器内路径 目的主机路径
9、导入导出容器
docker export id > xx.tar 导出为tar文件
cat xx.tar | docker import - 镜像用户/镜像名:镜像版本号 将tar转为容器对象
10、参考图片
四、镜像分层
Docker中的镜像分层,支持通过扩展原有镜像,创建新的镜像
案例:ubuntu里面无vim
1、更新包管理工具
apt-get update
apt-get install vim 安装
2、打包为新镜像
docker commit -m="提交信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
docker commit -m="vim cmd add ok" -a="laptoy" cid myubuntu:1.0
五、本地镜像推送到阿里云
1、阿里云镜像服务操作
阿里云容器镜像服务
1、进入个人实例
2、创建命名空间
3、创建镜像仓库
4、点击管理
2、实操
# 1、登录阿里云Docker Registry
docker login --username=la**** registry.cn-hangzhou.aliyuncs.com# 2、push
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/laptoy/myubuntu:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/laptoy/myubuntu:[镜像版本号]# 3、pull
docker pull registry.cn-hangzhou.aliyuncs.com/laptoy/myubuntu:[镜像版本号]
六、本地镜像推送到私有库
1、下载镜像Docker Registry
docker pull registry
2、运行docker私服库
docker run --name registry \
-p 5000:5000 \
-v /mydata/myregistry/:/tmp/registry \
--privileged=true \
-d registry
3、ubuntu安装ifconfig命令并打包(将容器打包为镜像)
apt-get update
apt-get install net-tools
docker commit -m="ifconfig add ok" -a="laptoy" cid myubuntu:1.0
4、验证私服库是否存在镜像
curl -XGET http://192.168.56.10:5000/v2/_catalog
5、将新镜像修改为符合私服规范的tag
docker tag 镜像:Tag Host:Port/Repository:Tag
docker tag myubuntu:1.0 192.168.56.10:5000/myubuntu:2.0
6、修改配置文件使其支持http
vi /etc/docker/daemon.json
加入,"insecure-registries":["ip:port"]到json串中 注意逗号`重启docker`
7、推送到私服库
docker push 镜像名
docker push 192.168.56.10:5000/myubuntu:2.0
8、验证私服镜像列表
curl -XGET http://192.168.56.10:5000/v2/_catalog
9、拉到本地
docker pull Host:port/镜像:[Tag]
七、容器数据卷
1、设置root权限
Docker挂载如果出现cannot open directory.:Permission denied
挂载目录后加--privileged=true
,使用该参数,容器的root拥有真正的root权限
2、挂载目录
宿主机目录和容器目录互通互联(容器停止也会数据共享)
1、操作
-v 宿主机目录绝对路径:容器路径
2、测试
docker run -it --name myubuntu \
-v /mydata/ubuntu/tmp/host_data:/tmp/docker_data \
--privileged=true \
-d ubuntu \
3、查看挂载信息
docker inspect id
3、设置容器读写权限
1、默认容器内部为可读可写
-v 宿主机目录:容器路径:rw
2、设置容器只读
-v 宿主机目录:容器路径:ro
4、容器卷之间的继承(实际为复用-v指令)
宿主机和关联容器都实现数据共享
--volumes from 父容器
docker run -it --privileged --volumes from u1 --name u2 ubuntu
问:u1停止了,u2会怎么样?
答:u2扔和宿主机共享数据
u1启动后依旧有停止时u2和宿主机共享的数据
结论:–volumes from 仅实现挂载父类路径规则
八、安装常用软件(tomcat,mysql,redis,nginx)
设置容器自启动
docker update id --restart=always
8.1、tomcat
docker pull tomcat:7.0.70
docker run -d -p 8080:8080 --name tomcat tomcat:7.0.70
最新版tomcat10的webapps为空目录,需要把webapps删除,再将webapps.dist改为webapps
8.2、mysql
1、配置my.cnf解决字符编码问题
cd /mydata/mysql/conf
vi my.cnf [client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
2、运行容器
docker run -p 3306:3306 --name mysql \
--privileged=true \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
3、查看字符编码
mysql> SHOW VARIABLES LIKE 'character%';
8.3、Redis
1、拷贝一份redis.conf到宿主机目录
cp source [宿主机目录]
2、修改配置文件
2.1、禁用仅本地连接
# bind 127.0.0.1
2.2、关闭守护进程后台启动
daemonize no
2.3、关闭保护模式
protected-mode no
3、运行容器
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
4、进入客户端
docker exec -it redis bashredis-cli
8.4、Nginx
找一份nginx.conf
放在/mydata/nginx/conf
目录下
# 可以通过先运行一个nginx容器
docker run -p 80:80 --name nginx -d nginx:1.10
# 拷贝容器内的nginx.conf到宿主机目录
docker cp nginx:/etc/nginx/nginx.conf /mydata/nginx/conf
# 删除容器
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \ # 将宿主机目录挂载到容器内部目录
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-d nginx:1.10 # 后台运行容器,并返回容器ID;
Docker与微服务实战2022:基础篇相关推荐
- go语言微服务项目,基础篇--go4-聊天室
一.概述 实现一个网络聊天室(群), 功能分析: 上线下线 聊天,其他人.自己都可以看到聊天消息 查询当前聊天室用户名字 who 可以修改自己名字rename|Duke 超时踢出 效果展示: 技术点分 ...
- go语言微服务项目,基础篇--go2-高级语法
一.基础语法补充 1. switch package mainimport ("fmt""os" )//从命令输入参数,在switch中进行处理func mai ...
- go语言微服务项目,基础篇--02-shell
一.输入输出 echo 回声,用于打印输出工作 -n: 可以不换行 -e:对字符进行转义,\t ===> enable printf printf "%d,%s\n" 10 ...
- C++轻量级微服务_『高级篇』docker容器来说什么是微服务(三)
上一节说了单体架构,单体架构也无法适应我们的服务,来说说微服务,看能否解决单体架构的问题. 什么是微服务 最近两,三年才出现的新名词,虽然时间还不是很长,几乎每个软件从业人员对它有影响,也都通过微服务 ...
- 基于 Docker 的微服务架构实践
http://dockone.io/article/4887 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Do ...
- docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...
编者按:本文分享自CSDN技术博客,作者为 FlyWine,所有权归原著者.若有不妥,联系本头条号以做必要处理. 目录 Microservice 和 Docker 服务发现模式 客户端发现模式 Net ...
- 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...
<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...
- 使用Docker 实现微服务并搭建博客,一文全掌握
转载自 使用Docker 实现微服务并搭建博客,一文全掌握 Docker 是一个容器工具,提供虚拟环境.很多人认为,它改变了我们对软件的认识. 本文,通过搭建一个博客的例子,来介绍如何使用Docke ...
- Docker 精通之微服务
Docker 精通系列 Docker 精通之入门 Docker 精通之微服务 Docker 精通之常用命令 Docker 精通之 Dockerfile Docker 是一个容器工具,提供虚拟环境.很多 ...
最新文章
- ScribeFireBlog 发的一篇在Cnblogs的日志
- oracle 提取首字母,oracle 取字段文字拼音首字母
- 使用之location和rewrite用法
- 解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错
- Okhttp同步请求源码分析
- CentOS 8明年正式停止维护,以后再也不会有免费的RHEL了!
- 细说ReactiveCocoa的冷信号与热信号(一)
- new string(abc)创建了几个对象_面试题系列第2篇:new String()创建几个对象?有你不知道的...
- linux scrapy 定时任务_2019Python学习教程(全套Python学习视频):Scrapy爬虫框架入门...
- 【dp】P1077 摆花
- Maven 父子工程出现 [ERROR] 'dependencies.dependency.version' for xxxjar is missing. 问题
- unix系统发展史3
- 基于IDEA使用Spark API开放Spark程序(1)
- MIPI接口和DVP接口的区别及优点
- 联想电脑安装黑苹果全教程
- 解决background中图片太大只显示一部分
- FM收音机ic FM发射模块SX6116
- b站爬虫,用于查询主播舰队用户等级构成
- Python操作SQL server向其中插入数据时报错,且报错内容没有指向性。
- 微信公众号外部登录与授权,保存登录信息问题记录
热门文章
- ndnSIM学习(八)——examples之ndn-simple.cpp每个函数逐行剖析
- C语言设计学生宿舍管理系统
- 关于物流管理的软件测试项目经验,物流软件自动化测试用例管理和执行调度的设计与实现...
- 连接 mysql 数据库的 失败_MySQL_连接MySQL数据库失败频繁的原因分析,连接mySQL数据库失败频繁,主 - phpStudy...
- STM32F103学习之系统时钟配置
- 8、ARM嵌入式系统:UART初始化
- CyanogenMod 官方移植指南
- python好学吗 老程序员-学习python,难道是为了当一名苦逼的程序员吗?
- caused by: java.lang.outofmemory_hadoop运行java.lang.OutOfMemoryError:java heap space错误。
- [NOIP2022] 喵了个喵 题解