Docker

项目部署问题:

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:

  • 依赖关系复杂,容易出现兼容问题

  • 开发、测试、生产环境有差异

Docker如何解决依赖的兼容问题?

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包

  • 将每个应用放到一个隔离容器去运行,避免互相干扰

Docker如何解决不同系统环境的问题?

  • Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包

  • Docker运行到不同操作系统时,直接基于打包的库函数,借助于操作系统的Linux内核运行

Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容问题?

  • Docker允许开发中将应用、依赖、函数库、配置一起 打包,形成可移植镜像。

  • Docker应用运行在容器中,使用沙箱机制,相互 隔离

Docker如何解决开发、测试、生产环境有差异的问题

  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker与虚拟机

虚拟机是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在Windows系统里面运行Ubuntu系统,这样可以运行任意的Ubuntu应用了

特性 Docker 虚拟机
性能 接近原生 性能较差
硬盘占用 一般为MB 一般为GB
启动 秒级 分钟级

镜像和容器

镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起称为镜像。

容器(Container):镜像中的应用程序运行后形成的进程就是 容器,只是Docker会给容器做隔离,对外不可见

Docker和DockerHub

  • DockerHub:是一个Docker镜像的托管平台。这样的平台称之为Docker Registry

Docker架构

Docker是一个CS架构的程序,由两部分组成:

  • 服务端:Docker守护进程,负责处理Docker指令,管理镜像、容器等

  • 客户端:通过命令或者RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

镜像相关的命令

  • 镜像一般分成两部分:[repository]:[tag].

  • 没有指定tag时,默认时latest,代表最新版本镜像

CentOS拉取镜像步骤:

  1. 从DockerHub搜索镜像

  2. 根据镜像名称拉去想要的镜像

  3. 通过docker命令

    复制代码
    docker images

    查看镜像

容器相关命令

docker run 命令常见参数:

  • --name:指定容器名称

  • -p:指定端口映射

  • -d:让容器后台运行

  • -v:把数据卷挂载到某个容器目录

查看容器日志命令:

  • docker logs

  • 添加 -f 参数可以持续查看日志

查看容器状态:

  • docker ps

数据卷

容器与数据耦合问题:

  1. 不便于修改

  2. 数据不可复用

  3. 升级维护困难

什么是数据卷:

是一个虚拟目录,指向宿主机文件系统中的某个目录。

操作数据卷

数据卷基础语法如下:

docker volume[COMMAND]

docker volume 命令时数据卷操作,根据命令后跟随的command来确定下一步的操作:

  • create 创建一个volume

  • inspect 显示一个或多个volume的信息

  • ls 列出所有的volume

  • prune 删除未使用的volume

  • rm 删除一个或者多个指定的volume

镜像结构

  • 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

镜像是分层结构,每一层称为一个layer:

  • BaseImage层:包含基本的系统函数库、环境变量、文件系统

  • Entrypoint:入口,是镜像中应用启动的命令

  • 其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

什么是Dockerfile

Dockerfile是一个文本文件,其中包含一个个的 指令 ,用指令来说明要执行什么操作来构建镜像。每一个指令1都会形成一层layer。

DockerCompose

什么是DockerCompose:

  • 可以基于compose 文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。

  • Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

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

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 Registry )有公共的和私有的两种形式:

  • l公共仓库:例如Docker官方的 Docker Hub,国内也有一些云服务商提供类似于 Docker Hub 的公开服务,比如 网易云镜像服务DaoCloud镜像服务阿里云镜像服务等。

  • l除了使用公开仓库外,用户还可以在本地搭建私有 Docker Registry。企业自己的镜像最好是采用私有Docker Registry来实现。

3.1.简化版镜像仓库

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 可以查看当前私有镜像服务中包含的镜像

3.2.带有图形化界面版本

使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=传智教育私有仓库
      - REGISTRY_URL=http://registry:5000
    depends_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

推送镜像到私有镜像服务必须先tag,步骤如下:

  1. 重新tag本地镜像,名称前缀为私有仓库的地址:192.168.150.101:8080/

    docker tag nginx:latest 192.168.150.101:8080/nginx:1.0 
    
  2. 推送镜像

    docker push 192.168.150.101:8080/nginx:1.0 
    
  3. 拉取镜像

    docker pull 192.168.150.101:8080/nginx:1.0 
    
相关推荐
baihb10247 分钟前
Jenkins 构建流水线
运维·jenkins
BUG 40412 分钟前
LINUX--shell
linux·运维·服务器
菜鸟小白:长岛icetea18 分钟前
Linux零基础速成篇一(理论+实操)
linux·运维·服务器
Java小白中的菜鸟3 小时前
centos7的磁盘扩容
linux·运维·服务器
黑客老陈4 小时前
面试经验分享 | 北京渗透测试岗位
运维·服务器·经验分享·安全·web安全·面试·职场和发展
橘子师兄4 小时前
如何在自己的云服务器上部署mysql
运维·服务器·mysql
@泽栖4 小时前
Docker 常用命令
运维·服务器·docker
鲁正杰6 小时前
在一个服务器上抓取 Docker 镜像并在另一个服务器上运行
运维·服务器·docker
aherhuo6 小时前
基于openEuler22.09部署OpenStack Yoga云平台(一)
linux·运维·服务器·openstack
WebDeveloper20016 小时前
如何使用美国域名中心US Domain Center和WordPress创建商业网站
运维·服务器·css·网络·html