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
原文地址:https://www.cnblogs.com/ldy-miss/p/11839919.html