docker

  • Post author:
  • Post category:其他




docker



1.docker基本概念



Docker是什么

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。



项目部署的三个阶段

  1. 物理机

    部署一个服务,会粗略估计服务所需要的机器性能,然后去采购对应的真实物理机器,然后在该机器上安装服务需要的一些软件,比如服务器Tomcat,数据库MySQL等等。

    物理机时代缺点

    1、部署非常慢:采购机器,安装系统,安装软件等等;

    2、成本高以及资源浪费:通常为了以防服务性能不够,我们都会尽量采购比预期资源高一点的机器,不仅会增加成本,还会造成机器资源浪费;

    3、难于扩展与迁移:由于是真实的物理机,扩展或者迁移会比较麻烦;

  2. 虚拟机

    虚拟机能够在一台机器上创建多台机器,能够充分利用资源,并且也做到了机器之间的隔离,机器性能不够用了,也可以通过 Hypervisor 随时进行扩展。

    虚拟机时代缺点

    每一台虚拟机都要独立安装操作系统,大家知道操作系统其实也是比较占用性能的,有多少台虚拟机,我们就得多安装多少个操作系统,这样就浪费了很多资源。

  3. 容器化

    可以把容器看做是不用安装操作系统的虚拟机,容器化技术比虚拟机更加灵活,更加小巧,更加极致的利用物理机资源。



Docker出现原因

  • 一次构建,到处运行

    通过 Docker 打包镜像发布测试,提供了一个标准化的解决方案,再也不用担心因为环境不一致而导致的服务部署问题。

  • 更高效的计算资源利用

    容器类似于 VM,但是它们具有被放宽的隔离属性,可以在应用程序之间共享操作系统(OS)。因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。可以把容器看做是不用安装操作系统的虚拟机,容器化技术比虚拟机更加灵活,更加小巧,更加极致的利用物理机资源。

    记住最重要的一点,Dokcer实际是宿主机的一个普通的进程,这也是Dokcer与传统虚拟化技术的最大不同。



Docker优点

  • 部署快,开发测试更加敏捷

    通过Docker 打包镜像发布测试,一键运行。

  • 快速扩展机器

    由于Docker容器快速启动特性,可以很快速的启动几十个、上百个容器来提供更多并发和资源利用率,并且这么多容器也有比较成熟的解决方案来统一管理,比如K8S。

  • 提高系统利用率,降低硬件成本

    轻量级的虚拟机,更省资源。

  • 跨环境可移植

  • 更好的支持微服务

    微服务是近几年来IT圈内谈论比较多的一个名词,意义也很简单:尽可能细粒度拆分业务程序架构,由多个独立服务组成业务系统。

    而Docker的容器设计原则:一个容器一个服务,容器之间相互隔离,和微服务正好遥相呼应。

  • 应用运维标准化,支持不同语言系统

  • 避免云厂商锁定



Docker学习网站



2.docker安装



在线安装

  • 查看centos版本

    [root@oracleflink ~]# cat /etc/centos-release
    CentOS Linux release 7.9.2009 (Core)
    
  • 查看当前的内核版本

    [root@oracleflink ~]# uname -r
    3.10.0-1160.80.1.el7.x86_64
    

    内核版本不是3.10及以上的需要升级,

    centos7升级内核方法

  • 使用root权限更新yum包(非必须)

    yum -y update
    

    yum -y update:升级所有包同时也升级软件和系统内核

    yum -y upgrade:只升级所有包,不升级软件和系统内核

    注意:这个命令不是必须的,看个人情况,后面出现不兼容的情况的话就必须update了。

  • 卸载旧版本(非必须)

    yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
    
  • 安装需要的软件包

    yum install -y yum-utils device-mapper-persistent-data lvm2
    

    yum-util 提供 yum-config-manager功能

    device-mapper-persistent-data;lvm2是devicemapper驱动依赖

  • 查看yum 仓库

    [root@oracleflink ~]# ll /etc/yum.repos.d/
    total 48
    -rw-r--r--. 1 root root 1664 Nov 23  2020 CentOS-Base.repo
    -rw-r--r--. 1 root root 1309 Nov 23  2020 CentOS-CR.repo
    -rw-r--r--. 1 root root  649 Nov 23  2020 CentOS-Debuginfo.repo
    -rw-r--r--. 1 root root  314 Nov 23  2020 CentOS-fasttrack.repo
    -rw-r--r--. 1 root root  630 Nov 23  2020 CentOS-Media.repo
    -rw-r--r--. 1 root root 1331 Nov 23  2020 CentOS-Sources.repo
    -rw-r--r--. 1 root root 8515 Nov 23  2020 CentOS-Vault.repo
    -rw-r--r--. 1 root root  616 Nov 23  2020 CentOS-x86_64-kernel.repo
    -rw-r--r--. 1 root root 2081 Nov 15 11:13 docker-ce.repo
    -rw-r--r--. 1 root root 1946 Jul 10 19:08 elrepo.repo
    

    如果用的厂商的服务器(阿里云、腾讯云)一般都会有docker仓库,如果用的是虚拟机或者公司的服务器基本s上没有。

  • 设置docker,yum源

    yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
    

    上面两个地址三选一,Docker官方提供的Docker Registry镜像仓库是Docker Hub,但是国内访问这些服务可能比较慢,因此国内的一些云服务商提供了针对Docker Hub的镜像服务(Registry Mirror),这些镜像服务被称为加速器。使用加速器会直接从国内的地址下载Docker Hub的镜像。注意如果下载镜像较慢可以配置镜像加速服务 ,

    配置镜像加速

  • 配置镜像加速(非必须)

    [root@oracleflink ~]# cat /etc/docker/daemon.json 
    {
    "registry-mirrors" : [
        "https://docker.mirrors.ustc.edu.cn",
        "https://hub-mirror.c.163.com",
        "https://mirror.ccs.tencentyun.com",
        "https://registry.docker-cn.com"
      ]
    }
    # 修改配置后需要重启docker 服务
    [root@oracleflink ~]# systemctl restart docker
    

    常见的镜像加速器地址

    • Docker 中国官方镜像 https://registry.docker-cn.com
    • DaoCloud 镜像站 http://f1361db2.m.daocloud.io
    • Azure 中国镜像 https://dockerhub.azk8s.cn
    • 中科大镜像站 https://docker.mirrors.ustc.edu.cn
    • 阿里云 https://<your_code>.mirror.aliyuncs.com

      需要先在阿里云注册并登录,点击“创建我的容器镜像”, 进入管理界面,

      然后点击“镜像加速器” ,可获得镜像加速器连接。
    • 七牛云 https://reg-mirror.qiniu.com
    • 网易云 https://hub-mirror.c.163.com
    • 腾讯云 https://mirror.ccs.tencentyun.com


    注意要启动docker后才有

    /etc/docker

    这个文件夹

    daemon.json

    文件自己建

  • 安装docker

    yum install docker-ce docker-ce-cli containerd.io
    

    docker-ce:docker 引擎,社区版

    docker-ce-cli: docker 引擎的命令行界面,社区版

    containerd.io:可用作 Linux 和 Windows 的守护程序。 它管理其主机系统的完整容器[生命周期],从图像传输和存储到容器执行和监督,再到低级存储到网络附件等等。

    注意:默认执行

    yum install docker-ce

    就可以了,后面两个依赖不是必须的

  • 启动docker

    systemctl start docker
    
  • 设置开机启动

    systemctl enable docker
    
  • 验证是否安装成功

    docker info
    



离线安装

  • 准备安装包

    # 下载地址
    https://download.docker.com/linux/static/stable/x86_64/docker-18.09.6.tgz
    
  • 解压缩安装包

    tar -zxvf docker-18.09.6.tgz 
    
  • 复制解压缩后的文件到指定文件夹

     cp docker/* /usr/bin/ 
    
  • 注册编辑docker服务

    vi /etc/systemd/system/docker.service
    
  • 复制下列内容到该文档中

    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service
    Wants=network-online.target
      
    [Service]
    Type=notify
    # the default is not to use systemd for cgroups because the delegate issues still
    # exists and systemd currently does not support the cgroup feature set required
    # for containers run by docker
    ExecStart=/usr/bin/dockerd
    ExecReload=/bin/kill -s HUP $MAINPID
    # Having non-zero Limit*s causes performance problems due to accounting overhead
    # in the kernel. We recommend using cgroups to do container-local accounting.
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    # Uncomment TasksMax if your systemd version supports it.
    # Only systemd 226 and above support this version.
    #TasksMax=infinity
    TimeoutStartSec=0
    # set delegate yes so that systemd does not reset the cgroups of docker containers
    Delegate=yes
    # kill only the docker process, not all processes in the cgroup
    KillMode=process
    # restart the docker process if it exits prematurely
    Restart=on-failure
    StartLimitBurst=3
    StartLimitInterval=60s
      
    [Install]
    WantedBy=multi-user.target
    
  • 添加权限后启动

    chmod +x /etc/systemd/system/docker.service
    
  • 重新加载配置文件

    systemctl daemon-reload
    
  • 启动Docker

    systemctl start docker
    
  • 设置开机自启

    systemctl enable docker.service
    
  • 验证是否安装成功

    # 查看docker 状态
    systemctl status docker
    # 查看docker版本
    docker -v
    



3.docker概念与执行流程



容器化平台

Docker 是提供应用打包,部署与运行应用的容器化平台。

在这里插入图片描述



Docker引擎

在这里插入图片描述

  • docker daemon

    Docker的服务端组件,他是Docker架构中运行在后台的一个守护进程,可以接收并处理来自命令行接口及API接口的指令,然后进行相应的后台操作。

  • REST API

    表示应用程序API接口,开发者通过该API接口可以与Docker的守护进程进行交互,从而指示后台进行相关操作。

  • docker CLI

    表示Docker命令行接口,开发者可以在命令行中使用Docker相关指令与Docker守护进程进行交互,从而管理诸如image(镜像)、container(容器)、network(网络)和data volumes(数据卷)等实体。



容器,镜像,仓库

  • 仓库存放镜像的地方
  • 镜像可以类似Java中的类
  • 容器类的实例化,对象

一个仓库可以存放多个镜像,一个镜像可以构建多个容器。



Docker执行流程

在这里插入图片描述

客户端发送

docker pull Tomcat

命令,命令到达 Docker daemon(守护程序),守护进程首先检查本地是否有该

Tomcat

的镜像,如果没有,则从注册中心(仓库)拉取该镜像;镜像拉取到本地后,客户端执行

docker run

命令,守护程序就会创建容器,启动应用。



docker pull 命令详解

Docker Pull 命令是用来从 Docker 镜像仓库中拉取一个或多个镜像到本地主机的命令。执行 Docker Pull 命令后,Docker 客户端会首先检查本地主机是否已经存在该镜像,如果已经存在则直接使用本地的镜像,否则会从 Docker 镜像仓库中拉取对应的镜像。下面是 Docker Pull 命令的详细流程:

  1. 解析镜像名称和标签

    Docker Pull 命令需要提供要拉取的镜像名称和标签(tag),例如

    docker pull nginx:latest

    。Docker 客户端会对这个名称进行解析,确定镜像所在的 Docker 镜像仓库地址、仓库名称和标签。

  2. 认证 Docker 镜像仓库

    如果需要认证 Docker 镜像仓库,Docker 客户端会提示用户输入用户名和密码或者其他认证信息,以便向 Docker 镜像仓库发起认证请求。

  3. 检查本地主机是否已有该镜像

    Docker 客户端会检查本地主机是否已经存在该镜像。如果本地主机已经有了该镜像,Docker 客户端会直接使用本地的镜像,否则会从 Docker 镜像仓库中拉取对应的镜像。

  4. 从 Docker 镜像仓库中拉取镜像

    如果本地主机没有该镜像,Docker 客户端会向 Docker 镜像仓库发起拉取镜像的请求。Docker 镜像仓库会返回该镜像的所有层(layers),Docker 客户端会将这些层下载到本地主机,并根据层的依赖关系进行组装,最终生成完整的镜像。

  5. 保存镜像到本地主机

    Docker 客户端会将拉取到的镜像保存到本地主机的 Docker 镜像缓存中,以便后续使用。Docker 镜像缓存一般位于

    /var/lib/docker

    目录下,其中的

    image

    目录存储了所有已经拉取到本地主机的镜像。

  6. 更新本地镜像索引

    Docker 客户端会更新本地镜像索引(image index),以便在后续使用

    docker run

    命令时能够快速地找到该镜像。本地镜像索引一般位于

    /var/lib/docker/image/docker/registry/v2/repositories

    目录下。

总的来说,Docker Pull 命令的主要作用是从 Docker 镜像仓库中拉取镜像并保存到本地主机,以便在后续使用

docker run

命令时能够快速地启动容器。



4.docker常用命令



万能帮助命令


  • docker --help


  • docker 命令 --help

    [root@oracleflink ~]# docker run --help
    
    Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    
    Run a command in a new container
    .....
    

  • 官方命令文档参考



常用命令

  • 查看版本信息

    [root@oracleflink ~]# docker version
    Client: Docker Engine - Community
     Version:           20.10.21
     API version:       1.41
     Go version:        go1.18.7
     Git commit:        baeda1f
     Built:             Tue Oct 25 18:04:24 2022
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.21
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.18.7
      Git commit:       3056208
      Built:            Tue Oct 25 18:02:38 2022
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.6.9
      GitCommit:        1c90a442489720eec95342e1789ee8a5e1b9536f
     runc:
      Version:          1.1.4
      GitCommit:        v1.1.4-0-g5fd4c4d
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    
  • 查看系统信息

    docker info
    



镜像常用命令

  • 查看镜像

    [root@oracleflink ~]# docker images
    REPOSITORY                                                               TAG           IMAGE ID       CREATED        SIZE
    mcr.microsoft.com/mssql/server                                           2017-latest   a03c94c3147d   2 months ago   1.33GB
    registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle_12cr2_ee_lhr_12.2.0.1   2.0           eb1a87913afe   2 years ago    16.1GB
    registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle-12c                    latest        2963f42e27a2   2 years ago    6.01GB
    registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g                     latest        3fa112fd3642   6 years ago    6.85GB
    

    REPOSITORY: 镜像仓库源

    TAG:镜像版本,latest 表示最新版本

    IMAGE ID:镜像ID(特别重要)

    CREATED:创建时间

    SIZE:镜像大小。

  • 搜索镜像

    [root@oracleflink ~]# docker search docker
    NAME          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    nginx         Official build of Nginx.                        17721     [OK]       
    ubuntu        Ubuntu is a Debian-based Linux operating sys…   15255     [OK]       
    mysql         MySQL is a widely used, open-source relation…   13504     [OK]       
    node          Node.js is a JavaScript-based platform for s…   12133     [OK]       
    postgres      The PostgreSQL object-relational database sy…   11693     [OK]       
    redis         Redis is an open source key-value store that…   11590     [OK]       
    alpine        A minimal Docker image based on Alpine Linux…   9450      [OK]       
    mongo         MongoDB document databases provide high avai…   9283      [OK]       
    python        Python is an interpreted, interactive, objec…   8164      [OK]       
    centos        DEPRECATED; The official build of CentOS.       7408      [OK]       
    mariadb       MariaDB Server is a high performing open sou…   5155      [OK]       
    wordpress     The WordPress rich content management system…   5001      [OK]       
    rabbitmq      RabbitMQ is an open source multi-protocol me…   4560      [OK]       
    debian        Debian is a Linux distribution that's compos…   4504      [OK]       
    golang        Go (golang) is a general purpose, higher-lev…   4356      [OK]       
    httpd         The Apache HTTP Server Project                  4247      [OK]       
    registry      The Docker Registry 2.0 implementation for s…   3721      [OK]       
    openjdk       Pre-release / non-production builds of OpenJ…   3495      [OK]       
    busybox       Busybox base image.                             2822      [OK]       
    traefik       Traefik, The Cloud Native Edge Router           2726      [OK]       
    docker        Docker in Docker!                               2116      [OK]       
    memcached     Free & open source, high-performance, distri…   1971      [OK]       
    hello-world   Hello World! (an example of minimal Dockeriz…   1906      [OK]       
    influxdb      InfluxDB is an open source time series datab…   1651      [OK]       
    consul        Consul is a datacenter runtime that provides…   1355      [OK]  
    


    docker search <镜像名>

    NAME:镜像名称

    DESCRIPTION:镜像描述

    STARS:收藏数

    OFFICIAL:是否官方

    AUTOMATED:是否自动构建

    也可以直接进入

    docker hub网站直接搜索

  • 下载镜像

    docker pull 镜像名<:tags>
    

    如果不指定tags,默认下载最新版

  • 删除镜像

    docker rmi repository<:tag>  # 根据名称和版本删除,如果不指定tag,默认是lastest
    docker rmi IMAGE_ID    # 根据镜像id删除
    docker rmi IMAGE_ID1 IMAGE_ID2 ...   # 批量删除
    



容器常用命令

  • 新建容器并启动

    docker run <参数> 镜像id|镜像名称
    docker run -d --restart=always --privileged=true -p 1522:1522 -p 5501:5501 --name oracle11g -v /oracle11g/oradata:/oracle11g/oradata registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    

    常用参数说明

    docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
    -d, --detach=false         指定容器运行于前台还是后台,默认为false     
    -i, --interactive=false   打开STDIN,用于控制台交互    
    -t, --tty=false            分配tty设备,该可以支持终端登录,默认为false    
    -u, --user=""              指定容器的用户    
    -a, --attach=[]            登录容器(必须是以docker run -d启动的容器)  
    -w, --workdir=""           指定容器的工作目录   
    -c, --cpu-shares=0        设置容器CPU权重,在CPU共享场景使用    
    -e, --env=[]               指定环境变量,容器中可以使用该环境变量    
    -m, --memory=""            指定容器的内存上限    
    -P, --publish-all=false    指定容器暴露的端口    
    -p, --publish=[]           指定容器暴露的端口   
    -h, --hostname=""          指定容器的主机名    
    -v, --volume=[]            给容器挂载存储卷,挂载到容器的某个目录    
    --volumes-from=[]          给容器挂载其他容器上的卷,挂载到容器的某个目录  
    --cap-add=[]               添加权限    
    --cap-drop=[]              删除权限    
    --cidfile=""               运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法    
    --cpuset=""                设置容器可以使用哪些CPU,此参数可以用来容器独占CPU    
    --device=[]                添加主机设备给容器,相当于设备直通    
    --dns=[]                   指定容器的dns服务器    
    --dns-search=[]            指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件    
    --entrypoint=""            覆盖image的入口点    
    --env-file=[]              指定环境变量文件,文件格式为每行一个环境变量    
    --expose=[]                指定容器暴露的端口,即修改镜像的暴露端口    
    --link=[]                  指定容器间的关联,使用其他容器的IP、env等信息    
    --lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc时使用    
    --name=""                  指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字    
    --net="bridge"             容器网络设置:  
                              bridge 使用docker daemon指定的网桥       
                              host   //容器使用主机的网络    
                              container:NAME_or_ID >//使用其他容器的网络,共享IP和PORT等网络资源    
                              none 容器使用自己的网络(类似--net=bridge),但是不进行配置   
    --privileged=false         指定容器是否为特权容器,特权容器拥有所有的capabilities    
    --restart="no"             指定容器停止后的重启策略:  
                              no:容器退出时不重启    
                              on-failure:容器故障退出(返回值非零)时重启   
                              always:容器退出时总是重启    
    --rm=false                 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)    
    --sig-proxy=true           设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理    
    
  • 进入容器

    # 方法一 使用run方式在创建时进入
    docker run -it [镜像id|镜像名] /bin/bash
    # 方法二 使用 attach 命令(进入已启动的容器)
    docker attach --sig-proxy=false 容器名称|容器ID
    # 方法三 使用 exec 命令(进入已启动的容器)一般使用这个方法
    docker exec -it 容器名称|容器ID  /bin/bash
    
  • 退出容器

    # 方法一
    Ctrl+P+Q : 仅退出容器,不关闭容器
    # 方法二
    exit: 关闭容器并退出。
    # 方法三
    ctr + d :同方法二,方法二的快捷方式
    
  • 查看所有运行的容器

    1、查看正在运行的容器
    docker ps
    2、查看正在运行的容器的ID
    docker ps -q
    3、查看正在运行+历史运行过的容器
    docker ps -a
    4、显示运行容器总文件大小
    docker ps -s
    
  • 停止与删除容器

    # 1.停止一个运行中的容器
    docker stop 容器名|容器id
    # 2.杀掉一个运行中的容器
    docker kill 容器名|容器id
    # 3.删除一个已停止的容器
    docker rm 容器名|容器id
    # 4.删除一个运行中的容器
    docker rm -f 容器名|容器id
    
  • 查看容器日志

    docker logs <参数>容器名|容器id
    

    参数:

    -f 跟踪日志输出

    -t:显示时间戳

    –tail N:仅列出最后N条日志

  • 查看容器进程

    docker top 容器ID|容器名
    
  • 查看容器信息

    docker inspect 容器ID|容器名
    
  • 主机和容器之间数据复制

    # 将容器中的文件copy至本地路径
    docker cp 容器名|容器ID:/[container_path] [local_path]
    docker cp /www/runoob 96f7f14e99ab:/www/
    # 将主机文件copy至容器
    docker cp [local_path] 容器名|容器ID:/[container_path]
    # 将主机文件copy至容器,目录重命名为[container_path](注意与非重命名copy的区别)
    docker cp /www/runoob 96f7f14e99ab:/www
    


    cp命令参考



5.docker file



docker file概念

Dockerfile是自动构建docker镜像的配置文件,将镜像构建过程通过指令的方式定义在Dockerfile中。配合

docker build

命令行可以实现自动化的Docker镜像的构建。



docke filr 编写规范

  • 每条指令(每行开头关键字)都必须是大写字母
  • 执行顺序是按照编写顺序从上到下
  • # 表示注释



Dockerfile指令详解

  • FROM- 镜像从那里来

  • MAINTAINER- 镜像维护者信息

  • RUN- 构建镜像执行的命令,每一次RUN都会构建一层

  • CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数

  • VOLUME- 定义数据卷,如果没有定义则使用默认

  • USER- 指定后续执行的用户组和用户

  • WORKDIR- 切换当前执行的工作目录

  • HEALTHCHECH- 健康检测指令

  • ARG- 变量属性值,但不在容器内部起作用

  • EXPOSE- 暴露端口

  • ENV- 变量属性值,容器内部也会起作用

  • ADD- 添加文件,如果是压缩文件也解压

  • COPY- 添加文件,以复制的形式

  • ENTRYPOINT- 容器进入时执行的命令



Dockerfile参考资料



6.容器间通信

容器间通信方式

  • 利用容器ip访问

    容器重启后,ip会发生变化。通过容器ip访问不是一个好的方案。

  • 利用宿主机的“ip:port”访问

    通过宿主机的ip:port访问,只能依靠监听在暴露出的端口的进程来进行有限的通信。

  • 利用link建立连接进行通信(官方不推荐使用)

  • 利用“User-defined networks”进行通信(官方推荐使用)


容器间通信



7.容器间数据共享

数据共享三种方式

  • Bind Mounts方式共享数据

    docker run -it -v /home/webapps:/usr/local/tomcat/webapps -p 8083:8080 --name tomcat03 tomcat:latest /bin/bash
    

    执行命令

    docker run -it -v 宿主机目录:容器目录

  • Volumes方式数据共享

  • Volume container(数据卷容器)方式,(共享容器)

    1. 宿主机创建目录

      我们在 /home 下创建 /share_volume 目录,然后在这个目录下新建 index.html 文件,里面就一句 hello docker!!!。

    2. 创建共享容器

      docker create --name tomcat_share -v /home/share_volume:/usr/local/tomcat/webapps tomcat:latest /bin/true
      
    3. 创建实际容器

      docker run -d -p 8081:8080 --volumes-from tomcat_share --name tomcat01 -d tomcat
      docker run -d -p 8082:8080 --volumes-from tomcat_share --name tomcat02 -d tomcat
      

      上面启动了两个容器,会发现更改宿主机的/home/share_volume 目录内容,两个容器的/usr/local/tomcat/webapps 目录内容都会改变。


容器间进行数据共享的三种方式



8.docker compose



Docker Compose概念

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。



出现原因

在实际的生产中,一般都是使用一个docker容器部署一个应用进程,这种情况下,当部署多个不同应用或者一个应用部署多个实例的时候,就要运行多个容器。多个容器协同工作需要一个管理者来管理他们,定义这些容器如何相互关联。compose 就是做这件事的。

Docker Compose的主要作用是帮助我们批量有规则的管理容器。



参考资料


官网Docker Compose


Docker Compose博客


Docker Compose菜鸟教程



9.docker 安装常见数据库



docker 安装oracle11g

  • 创建数据共享目录

    mkdir -p /oracle11g/oradata && chmod 777 /oracle11g/oradata
    
  • 拉取镜像

    docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    
  • 创建容器

    docker run -d --restart=always --privileged=true -p 1522:1522 -p 5501:5501 --name oracle11g -v /oracle11g/oradata:/oracle11g/oradata registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    

    注意这里的暴露端口为1522,与oralce默认监听端口1521不一致,需要进入容器

    修改oracle默认监听端口

    ,注意在容器内修改端口,只需要更改端口

    PORT

    ,不需要更改

    HOST

  • 查看oracle11g容器是否创建成功

    docker ps -a
    
  • 进入镜像镜像进行配置

    docker exec -it oracle11g /bin/bash
    
  • 切换到root下进行配置

    su root (密码:helowin)
    
  • 编辑profile文件配置ORACLE环境变量

    vi /etc/profile
    # 添加:
    export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
    export ORACLE_SID=helowin
    export PATH=$ORACLE_HOME/bin:$PATH
    # 环境生效
    source /etc/profile
    
  • 创建软连接

    ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
    
  • 切换到oracle 用户

    su - oracle
    
  • 登录sqlplus并修改sys、system用户密码

    sqlplus /nolog
    conn /as sysdba
    
  • 修改sys、system用户密码并刷新权限

    alter user system identified by 123456;
    alter user sys identified by 123456;
    # 设置密码生效策略
    ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
    exit 
    
  • 查看oracle实例

    [oracle@177c1d8c514a ~]$ lsnrctl status
    [oracle@177c1d8c514a ~]$ exit
    
  • 用nacivat连接oracle数据库

    服务名:helowin(一定要填写helowin)
    用户名:system
    密码:123456(第10步设置的密码)
    



docker 安装oracle12c

  • 创建数据共享目录

    mkdir -p /home/nicemoe/oradata && chmod 777 /home/nicemoe/oradata
    
  • 拉取镜像

    docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle-12c
    
  • 启动容器

    docker run -d --restart=always --privileged=true --name myoracle -p 1521:1521 -p 5500:5500 -e ORACLE_SID=ORCLCDB -e ORACLE_PDB=orclpdb1 -e ORACLE_PWD=123456 -e ORACLE_CHARACTERSET=zhs16gbk -e ORACLE_BASE=/opt/oracle -e ORACLE_HOME=/opt/oracle/product/12.2.0.1/dbhome_1 -e PATH=/opt/oracle/product/12.2.0.1/dbhome_1/bin:/opt/oracle/product/12.2.0.1/dbhome_1/OPatch/:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -v /home/nicemoe/oradata:/opt/oracle/oradata registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle-12c:latest
    
  • 修改密码

    docker exec  <container name> ./setPassword.sh <your password>
    例如:
    docker exec  a5f5a90ec826 ./setPassword.sh 123456
    

    注意要在容器启动后在执行,不然报错。

  • 登录数据库

    在这里插入图片描述

  • 参考资料


    docker安装orcale-12c


    Oracle数据库CDB与PDB


    oracle12c19c创建用户


    jdbc连接oracle常见两种方式 OCI THIN



docker 安装sqlserver2017

  • 创建数据共享目录

    mkdir -p /sqlserver2017/sqlserver-data && chmod 777 /sqlserver2017/sqlserver-data
    
  • 拉取镜像

    docker pull mcr.microsoft.com/mssql/server:2017-latest
    
  • 启动容器

    docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=qwe20211114." -p 1433:1433 --name sqlserver2017 -d --restart=always --privileged=true -v /sqlserver2017/sqlserver-data:/sqlserver2017/sqlserver-data mcr.microsoft.com/mssql/server:2017-latest
    

    注意这个SA_PASSWORD必须要是强密码,不然不通过

    保证安装内存2G及以上

  • 进入容器

    # 1.进入容器
    docker exec -it sqlserver2017 /bin/bash
    # 2.登录数据库
    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "qwe20211114."
    # 3.查询数据库
    select name from sys.Databases
    go
    # 4.创建数据库
    create database flinktest
    go
    
  • 远程连接

    在这里插入图片描述

  • 参考资料


    Docker 安装 SQL Server教程



版权声明:本文为weixin_44446122原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。