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
links
解决的是容器间连接问题。容器间可以通过名称相互访问
- 服务名称:别名
- 如不指定别名,服务名称作为别名
例如: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