• 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

  1. docker有着比虚拟机更少的抽象层
  2. 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:基础篇相关推荐

  1. go语言微服务项目,基础篇--go4-聊天室

    一.概述 实现一个网络聊天室(群), 功能分析: 上线下线 聊天,其他人.自己都可以看到聊天消息 查询当前聊天室用户名字 who 可以修改自己名字rename|Duke 超时踢出 效果展示: 技术点分 ...

  2. go语言微服务项目,基础篇--go2-高级语法

    一.基础语法补充 1. switch package mainimport ("fmt""os" )//从命令输入参数,在switch中进行处理func mai ...

  3. go语言微服务项目,基础篇--02-shell

    一.输入输出 echo 回声,用于打印输出工作 -n: 可以不换行 -e:对字符进行转义,\t ===> enable printf printf "%d,%s\n" 10 ...

  4. C++轻量级微服务_『高级篇』docker容器来说什么是微服务(三)

    上一节说了单体架构,单体架构也无法适应我们的服务,来说说微服务,看能否解决单体架构的问题. 什么是微服务 最近两,三年才出现的新名词,虽然时间还不是很长,几乎每个软件从业人员对它有影响,也都通过微服务 ...

  5. 基于 Docker 的微服务架构实践

    http://dockone.io/article/4887 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Do ...

  6. docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...

    编者按:本文分享自CSDN技术博客,作者为 FlyWine,所有权归原著者.若有不妥,联系本头条号以做必要处理. 目录 Microservice 和 Docker 服务发现模式 客户端发现模式 Net ...

  7. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

  8. 使用Docker 实现微服务并搭建博客,一文全掌握

    转载自  使用Docker 实现微服务并搭建博客,一文全掌握 Docker 是一个容器工具,提供虚拟环境.很多人认为,它改变了我们对软件的认识. 本文,通过搭建一个博客的例子,来介绍如何使用Docke ...

  9. Docker 精通之微服务

    Docker 精通系列 Docker 精通之入门 Docker 精通之微服务 Docker 精通之常用命令 Docker 精通之 Dockerfile Docker 是一个容器工具,提供虚拟环境.很多 ...

最新文章

  1. ScribeFireBlog 发的一篇在Cnblogs的日志
  2. oracle 提取首字母,oracle 取字段文字拼音首字母
  3. 使用之location和rewrite用法
  4. 解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错
  5. Okhttp同步请求源码分析
  6. CentOS 8明年正式停止维护,以后再也不会有免费的RHEL了!
  7. 细说ReactiveCocoa的冷信号与热信号(一)
  8. new string(abc)创建了几个对象_面试题系列第2篇:new String()创建几个对象?有你不知道的...
  9. linux scrapy 定时任务_2019Python学习教程(全套Python学习视频):Scrapy爬虫框架入门...
  10. 【dp】P1077 摆花
  11. Maven 父子工程出现 [ERROR] 'dependencies.dependency.version' for xxxjar is missing. 问题
  12. unix系统发展史3
  13. 基于IDEA使用Spark API开放Spark程序(1)
  14. MIPI接口和DVP接口的区别及优点
  15. 联想电脑安装黑苹果全教程
  16. 解决background中图片太大只显示一部分
  17. FM收音机ic FM发射模块SX6116
  18. b站爬虫,用于查询主播舰队用户等级构成
  19. Python操作SQL server向其中插入数据时报错,且报错内容没有指向性。
  20. 微信公众号外部登录与授权,保存登录信息问题记录

热门文章

  1. ndnSIM学习(八)——examples之ndn-simple.cpp每个函数逐行剖析
  2. C语言设计学生宿舍管理系统
  3. 关于物流管理的软件测试项目经验,物流软件自动化测试用例管理和执行调度的设计与实现...
  4. 连接 mysql 数据库的 失败_MySQL_连接MySQL数据库失败频繁的原因分析,连接mySQL数据库失败频繁,主 - phpStudy...
  5. STM32F103学习之系统时钟配置
  6. 8、ARM嵌入式系统:UART初始化
  7. CyanogenMod 官方移植指南
  8. python好学吗 老程序员-学习python,难道是为了当一名苦逼的程序员吗?
  9. caused by: java.lang.outofmemory_hadoop运行java.lang.OutOfMemoryError:java heap space错误。
  10. [NOIP2022] 喵了个喵 题解