Docker 的简单使用
docker-ce 开源
docker-ee 收费
Docker的安装
-
卸载原来的docker
yum remove docker
# centos8 需要卸载podman buildah
yum erase podman buildah -
下载阿里云的docker仓库
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
安装
yum install -y docker-ce
-
docker 加速器:文件存放路径
/etc/docker/daemon.json,后面也会有说的
{ "registry-mirrors":[ "https://1nj0zren.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn", "http://f1361db2.m.daocloud.io", "https://registry.docker-cn.com" ] }
-
启动docker
systemctl start docker
Docker简介
镜像
类似于安装系统时候需要的iso镜像文件
容器
启动之后的镜像
仓库
存放镜像
可以用公用的
可以有私有的
class myclass(): def __init__(): pass m=myclass()
测试docker是否安装正常
# 语法:docker run 镜像名称 docker run hello-world # 启动hello-world镜像,如果没有则下载最新版本 run 运行 hello-world 镜像名称
Docker常用命令
搜索镜像
# 语法:docker search 镜像名称 docker search mysql # 搜索镜像名称 NAME(名字) DESCRIPTION(描述信息) STARS(点赞数) OFFICIAL(是否为官方) AUTOMATED mysql MySQL is a widely used, open-source relation… 8499 [OK] mariadb MariaDB is a community-developed fork of MyS… 2942 [OK]
下载镜像
# 语法:docker pull 镜像名称 docker pull redis # 下载redis镜像
运行容器
-
如果本地没有此镜像,则会取docker hub 下载
-
如果有的话,则直接根据参数运行
docker run 镜像名称 -d # 后台启动 docker run --name redis-test -d redis # 起名字启动 -c # 启动并运行指定命令 docker run -d centos bash -c "while true;do echo helloworld;sleep 1;done" # 后台运行centos容器并没隔一秒输出helloworld。需要手动结束 -it # 进入镜像操作 i # 交互式操作 t # 终端 exit # 退出镜像 --rm # 容器退出,并把容器删掉 docker run -it --rm ubuntu bash
查看本地镜像
docker images
-q 只显示id
查看启动的容器
docker ps
-a 显示启动过的所有的容器
删除镜像
# 语法:docker rmi 镜像名称 docker rmi redis # 删除redis镜像 默认情况下不能删除启动过容器的镜像 -f 强制删掉
删除容器
# 语法:docker rm [镜像名称或id(id只用输入前四位即可)] docker rm redis # 根据redis容器 默认不能删除启动中的容器 -f 强制删除
退出容器不关闭容器
ctrl+p,q
进入正在启动中的容器
# 语法:docker exec -it [镜像名或镜像id] bash docker exec -it id|name bash # 根据id前三位或者名称进入容器 bash 是进入容器后执行的命令
查看容器的log日志
# 语法:docker logs [镜像名或镜像id] docker logs id|name -f 查看实时日志输出
导出镜像
# 语法:docker save -o [导出的文件名] [镜像名称] docker save -o name imagename|id docker save id|imagesname > centos.tar.gz
导入镜像
docker load -i centos.tar.gz
docker load < centos.tar.gz
提交
docker commit -m "message" 运行中的容器id
修改镜像名称
# 语法:docker tag [镜像id或名称] [新名称] docker tag redis newredis # 修改redis镜像为newredis 如果不存在tag,则在原来的镜像基础上加上tag信息,如果存在原来的tag信息,则会复制一份
删除所有的关闭状态下的容器
docker container prune
数据卷
将宿主机的文件挂载到容器里面
-v 宿主机目录:容器目录
docker run -it -v /opt/myetc:/etc centos bash
端口映射
docker run -d -P redis # 端口是随机产生 docker run -d -p 宿主机上的端口:容器内的端口 redis # 指定端口
查看容器的资源占用率
# 语法:docker stats 容器id或name docker stats redis # 查看redis容器状态 docker info # 查看docker信息 docker inspect 镜像名称 # 查看镜像信息
Dockerfile
# Dockerfile文件中要写的内容 FROM mycentos # 指定基础镜像 RUN yum install -y wget # 执行命令 RUN mkdir /mydata COPY a.txt /mydata # 将本地文件复制到镜像里面 ADD etc.tar.gz /mydata # 将本地文件复制到进项内,如果是压缩包,则自动解压 WORKDIR /mydata # 指定工作目录,exec 进入时候默认的目录 ENV # 设置变量 VOLUME # 设置数据卷 EXPOSE 5900 # 设置端口 CMD ["nginx", "-g", "daemon off;"] # 执行命令 # 语法:docker build -t [要生成的镜像名称] [要生成的目录(目录中必须有Dockerfile文件,-f可指定文件)] docker build -t mydocker . # 生成一个名为 mydocker 的镜像 docker build -t myflask -f flask. # 指定flask为dockerfile文件并生成一个名为 myflask 的镜像 # 说明:执行该语句会依次执行Dockerfile中的每行命令,最终完成镜像生成.可用 docker images 命令进行查看
copy 和add的区别
add 是自动解压
CMD只能有一个,RUN可以有多个
Docker本地私有仓库
docker run -d -p 5000:5000 -v /opt/register:/var/lib/registry registry # 创建本地仓库或启动本地仓库 docker tag redis 127.0.0.1:5000/redis # 修改名称 docker push 127.0.0.1:5000/redis # 上传到仓库 curl 127.0.0.1:5000/v2/_catalog # 查看结果 docker pull 127.0.0.1:5000/redis # 下载到仓库
如果要想使局域网内其他用户可以下载镜像,要修改文件/etc/docker/daemon.json
{ # 配置加速 "registry-mirrors": [ "https://1nj0zren.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn", "http://f1361db2.m.daocloud.io", "https://registry.docker-cn.com" ], # 本地仓库地址 "insecure-registries": [ "192.168.182.130:5000" ] }
docker-compose
什么是docker-compose?其实就是编排工具中的一个
编排(排版)工具有:swam、ocker-compose
yml 可以用来做配置文件
其它配置文件有:cfg、ini、xml、json
后缀名: yml yaml
数据类型:string、int、列表: [ ] -、字典:key:value
使用YAML文件的有,YAML可直接转为python的字典:salt、ansible、docker-compose、k8s
安装
-
手工安装
# a.1. 可以通过https://github.com/docker/compose/releases 官方地址下载最新的docker-compose(如: sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # 或者下载后直接上传到服务器指定位置即可)
# a.2. 如果系统没有安装curl,可以采用wget来安装(如: sudo wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` # 要是用最新版本只需更换1.23.1版本号即可,其余勿更改!!!
# b. 增加执行权限 sudo chmod +x /usr/local/bin/docker-compose
# c、测试安装结果 docker-compose version
-
pip 安装
# 1. 通过pip -v检查pip 是否安装及版本 # 2. yum -y install epel-release 安装pip基础 # 3. yum install python-pip 安装pip的python 支持 # 4. pip install --upgrade pip 完成pip的安装 # 5. pip install docker-compose 来安装docker-compose
-
命令补全(现在好像没用了,如果有其它补全方法请指导一下。如果我找到也会更新的)
curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
使用
docker-compose.yml文件,进阶版
version: '3' services: web: build: context: . # 指定dockerfile文件目录在哪 dockerfile: dockerfile文件 # 指定目录中的dockerfile文件 ports: - "3000:3000" redis: image: "redis" # 镜像,默认使用本地的,如果没有则下载
Dockerfile文件
from flask import Flask from redis import Redis app=Flask(__name__) redis=Redis(host="redis",port=6379) @app.route("/") def index(): count= redis.incr("hits") return "该页面被访问了{}次".format(count) if __name__=="__main__": app.run(port=3000,host="0.0.0.0")
Docker-compose常用命令
docker-compose build # 重新构建容器 docker-compose ps # 查看运行中的容器 docker-compose images # 查看镜像 docker-compose rm # 删除所有停止的容器
docker-compose.yml文件,初级版
version: '3' #版本 services: web: build: . # dockerfile文件叫Dockerfile ports: - "3000:3000" redis: image: "redis"
例子:
version: "3" services: redis: image: redis:alpine ports: - "6379" networks: - frontend db: image: postgres:9.4 volumes: - db-data:/var/lib/postgresql/data networks: - backend vote: image: dockersamples/examplevotingapp_vote:before ports: - 5000:80 networks: - frontend depends_on: # 先谁启动 - redis - db
Demo:使用dockerfile部署flask
以下过程可完全照搬操作。理解后自己再部署自己的吧。
第一步:编写flask项目,myflask.py
from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "Hello,This is my first dockerflask" if __name__=="__main__": app.run(host="0.0.0.0",port=9000)
第二步:编写flask文件
FROM python:3.7-alpine3.10 RUN mkdir /data ADD myflask.py /data RUN pip install flask -i https://pypi.douban.com/simple WORKDIR /data CMD ["python","myflask.py"]
第三步:生成镜像
docker build -t myflask -f dockerflask .
docker images
docker run -d -p 3000:9000 myflask