zoukankan      html  css  js  c++  java
  • Docker学习笔记

    Docker笔记

    概述

    • Docker是一种容器级虚拟化技术。
    • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
    • 关于虚拟机,官方的说法是:虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
    • 容器技术也能实现在一台硬件机器上虚拟出多个容器,每个容器中都可以放置一个互相隔离的服务器。所以,我们知道,容器其实也采用的是虚拟的方式进行,只不过,同等条件下,容器技术会比虚拟机技术效率要高,但是容器中没有包含独立的操作系统,虚拟机中包含独立的操作系统,所以每台虚拟机中的功能会比每个容器的功能要多些,正因为虚拟机带有很多东西,所以占的系统资源要大,效率要低些。

    安装

    由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本
    sudo apt-get remove docker docker-engine docker-ce docker.io
    
    更新apt包索引
    sudo apt-get update
    
    sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
    
    添加Docker官方的GPG密钥
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    
    sudo apt-get update
    
    安装最新版本的Docker CE
    sudo apt-get install -y docker-ce
    
    验证
    sudo service docker status
    sudo docker run hello-world
    

    三大核心组件

    1、Docker images

    也叫做Docker镜像,镜像一般是只读模版,用户不可以直接对其进行写入操作。使用镜像可以很轻松地创建容器。 镜像目的也就是更好的保证数据的安全。

    2、Docker containers

    也叫做Docker容器,容器与容器之间互相隔离、互不干扰,容器可以进行被开始、启动、停止、删除等操作。

    开发者可以快速地把自己的应用打包到容器中进行发布。

    3、Docker registries

    也叫做Docker仓库,主要是用来下载和上传镜像的,仓库分为公有仓库和私有仓库。

    Dockerfile文件

    看吧!

    基础命令

    进入容器内操作

    docker exec -it 容器ID/名字 /bin/bash

    这时 top 命令看到的只有当前容器运行的程序;进入容器后,可以进行操作等。

    exit 退出

    查看容器

    运行中:docker ps

    所有:docker ps -a

    查看镜像

    docker images

    删除容器

    docker rm ID

    删除所有容器
    docker rm $(docker ps -a -q)

    删除镜像

    需要先删除容器

    docker rmi (-f) ID

    拉取镜像

    docker pull 用户名/镜像名

    运行容器

    docker run -d 
    --name nginx_container 
    -p 80:80  
    -v /data:/data 
    --restart=always 
    nginx
    

    停止容器

    停止所有容器
    docker stop $(docker ps -a -q)

    构建镜像

    首先编写Dockerfile文件,然后用docker build来构建镜像

    docker build -t my_own_nginx:v1 .
    

    修改镜像标签

    docker tag my_own_nginx:v1 nginx:socv1

    实时查看容器日志

    docker logs -f container_id

    删除所有镜像

    docker rmi -f $(docker images -q)

    Docker-compose笔记

    概述

    • 我们使用 Docker 的时候,首先定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知
    • Docker-Compose是Docker官方的开源项目,使用它可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具

    安装

    pip3 install docker-compose
    docker-compose --version
    

    docker-compose文件

    • Compose模板文件可以使用.yml或.yaml作为文件扩展名,默认路径是当前目录下的docker-compose.yml,如需指定其他文件名,请使用 -f 参数。
    • 标准模板文件应该包含 version、services、networks 三大部分,最关键的是 services 和 networks 两个部分。

    image

    ​ image是指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。

    version: '3.7'
    
    services:
      icp:
        image: harbor.socmap.org/bs-icp/icp:v0.0.3
    

    build

    构建镜像,指定一个Dockerfile文件路径

    • context
      • 可以是Dockerfile的文件路径,也可以是到链接到git仓库的url,当提供的值是相对路径时,被解析为相对于撰写文件的路径,此目录也是发送到Docker守护进程的context
    • dockerfile
      • 文件名
    version: '3.7'
    
    services:
      icp:
        build:
          context: ./services/icp
          dockerfile: Dockerfile
    

    volumes

    映射一个目录。格式:宿主机:容器内

    例如:容器运行,需要存取验证码图片,映射容器路径/usr/src/app/project/captcha到宿主机/home/workspace/files/captcha,容器内,凡是使用前者保存的图片都会存储到后者目录。

    version: '3.7'
    
    services:
      icp:
        volumes:
          - '/home/workspace/files/captcha:/usr/src/app/project/captcha'
    

    ports

    ​ 用于映射端口。

    • 宿主机暴露端口:容器启动端口
    • 或只指定容器的端口,宿主机会随机映射端口
    version: '3.7'
    
    services:
      icp:
        ports:
          - 5033:5000
    

    expose

    暴露端口给link到当前容器的容器。不会将端口暴露给宿主机。

    例如:将端口8887暴露给link到本容器的容器

    version: '3.7'
    
    services:
      icp:
         expose:
          - 8887
    
    

    env_file

    一个专门存放变量的文件。如果有变量名称与environment指令冲突,则以后者为准。

    version: '3.7'
    
    services:
      icp:
        env_file:
          - name.env
    
    

    environment

    添加环境变量。

    version: '3.7'
    
    services:
      icp:
        environment:
          - FLASK_ENV=development
    
    

    restart

    重启容器。默认为 no

    • no
    • always,总是重启
    • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
    version: '3.7'
    
    services:
      icp:
        restart: always
    
    

    networks

    配置网段。

    version: '3.7'
    
    services:
      icp:
        networks:
          - defnet
    
    networks:
      defnet:
        ipam:
          driver: default
          config:
            - subnet: "172.68.0.0/16"
    
    

    depends_on

    解决容器服务间相互依赖、启动顺序的问题。

    例如:下面容器会先启动 redis 和 db 两个服务,再启动 icp 服务

    version: '3.7'
    
    services:
      icp:
        depends_on:
          - db
          - redis
          
      redis:
        image: redis
        
      db:
        image: postgres
    
    

    解决的是容器间连接问题。容器间可以通过名称相互访问

    • 服务名称:别名
    • 如不指定别名,服务名称作为别名

    例如:web 容器需要使用到 db 容器的 postgres 服务,web 容器以别名 database 为 hostname访问 db 服务

    version: '3.7'
    
    services:
      web:
        links:
          - db:database
          
      db:
        image: postgres
    
    

    command

    覆盖容器启动后默认执行的命令。

    version: '3.7'
    
    services:
      celery:
        command: celery -A app.celer.base worker -l info
    
    

    基础命令

    启动容器

    • -d 后台启动
    • -f 指定 docker-compose 文件
    • --build 重构镜像

    docker-compose up

    docker-compose up -d

    docker-compose -f docker-compose-dev.yml up -d –build

    拉取镜像

    docker-compose -f docker-compose-deploy.yml pull

    官方DockerHub的使用

    1,登录

    docker login -u timeashore -p ldytime,,

    2, 本地构建镜像,镜像名要与dockerhub仓库名相同,默认使用.目录下的Dockerfile文件

    docker build -t timeashore/blog:v0.0.1 .

    3, 推送到dockerhub

    docker push timeashore/blog:v0.0.1

    设置镜像加速和修改容器DNS

    下载官方镜像点的镜像国内访问速度太慢,使用加速器可以解决;DNS可以自己定义。
    首先打开配置文件daemon.json,CentOS上默认有此文件,但是Ubuntu上需要自己创建

    vim /etc/docker/daemon.json

    {
    	"registry-mirrors":["https://cabcj35w.mirror.aliyuncs.com"],
    	"dns": ["114.114.114.114", "8.8.8.8"]
    }
    
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  • 相关阅读:
    pytest: error: unrecognized arguments: --html=report.html
    运行pytest报错“PytestUnknownMarkWarning: Unknown pytest.mark.***
    SQL启动代理服务-自动备份的前提
    SQL Server数据库每日自动备份作业操作步骤(转载)
    c#播放声音文件(转载)
    使用Office组件导出Excel表格
    四舍五入保留小数问题
    List数据集按对象某个属性排序
    C# 创建Windows Service(Windows服务)程序
    WebService下实现大数据量的传输(转载)
  • 原文地址:https://www.cnblogs.com/ldy-miss/p/11839919.html
Copyright © 2011-2022 走看看