docker篇:迁移备份、Dockerfile、私有仓库、docker-compose

一、迁移备份

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
# 一个容器内,尽量只有一个软件,不要把mysql,redis,。。。方到一个容器中,而要放到多个容器 # 镜像--->容器--->装了软件(vim,mysql)--->打包成镜像---->运行成容器(带了软件) docker commit 容器id centos-vim:v1 # 容器打包成镜像 docker history 镜像的id # 查看分层历史 镜像分层:上传,下载镜像加速,底层有的文件不需要再下载了 docker save -o centos-vim.tar 镜像id # 把镜像备份成压缩包,copy给别人 docker load -i centos-vim.tar # 把压缩包,load成镜像 docker tag 20fc287cc64f centos-vim:v1 # 重新给镜像命名

二、Dockerfile

2.1 镜像如何获得

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
# 镜像如何获得 -1 从远程仓库拉 -2 通过容器做成镜像 -3 通过dockerfile构建 (文本文件) -4 通过备份的压缩包load回来

2.2 Dockerfile是什么?

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
# Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像 FROM: 指定基础镜像 RUN: 构建镜像过程中需要执行的命令。可以有多条。RUN mkdir lqz CMD:添加启动容器时需要执行的命令。多条只有最后一条生效。可以在启动容器时被覆盖和修改。 ENTRYPOINT:同CMD,但这个一定会被执行,不会被覆盖修改。 # cmd和ENTRYPOINT区别? MLABELAINTAINER:表明镜像的作者。将被遗弃,被LABEL代替。 EXPOSE:设置对外暴露的端口。 ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效 ADD:将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL作为要拷贝的文件 COPY:将本地文件或目录拷贝到镜像的文件系统中。 VOLUME:添加数据卷 WORKDIR:设置工作目录 # Dockerfile示例 FROM centos:centos7 MAINTAINER lqz LABEL author=lqz WORKDIR /lqz ENV NAME lqz RUN echo $NAME RUN yum install -y vim COPY redis.conf /root/redis.conf CMD sleep 50 # 如果公司使用docker开发,部署 -项目根路径有个dockerfile文件 ----> 开发完了传到git ----> 部署到机器上 ---> 从git拉下源代码 ---> docker软件已经有了 ----> docker build -t='django-soft' . ----> docker run -di --name=mysoft -p 8080:8080 -v ./luffy_api:soft django-soft -又改了代码--->git上去---->git pull 代码拉下来---->docker restart mysoft---->就看到最新的代码了

2.3 如何构建镜像和配置dockerfile

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
# 构建镜像 docker build -t='centos7-vim' . # 项目根路径会有dockerfile文件 FROM python:3.8 MAINTAINER lqz WORKDIR /soft COPY ./requestment.txt /soft/requestment.txt RUN pip install -r requestment.txt -i https://pypi.doubanio.com/simple #CMD ["uwsgi", "-x", "./luffy.xml"] CMD ["uwsgi", "./luffy.ini"] #CMD ["python", "manage_pro.py", "runserver"]

三、Docker私有仓库

3.1 如何将镜像传到公有仓库

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
# 把自己做的镜像,传到公共仓库 docker tag 5977ea9eb152 liuqingzheng/centos7-vim:v1 docker login docker push liuqingzheng/centos7-vim:v1 docker pull liuqingzheng/centos7-vim:v1 # 所有人都可拉

3.2 自己搭建私有仓库

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
1)拉取私有仓库镜像(此步省略) docker pull registry (2)启动私有仓库容器 docker run -di --name=registry -p 5000:5000 registry (3)打开浏览器 输入地址http://10.0.0.205:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空 (4)修改daemon.json vi /etc/docker/daemon.json 添加以下内容,保存退出。 {"insecure-registries":["10.0.0.205:5000"]} 此步用于让 docker信任私有仓库地址 (5)重启docker 服务 systemctl restart docker (6)标记此镜像为私有仓库的镜像 docker tag 5977ea9eb152 10.0.0.205:5000/centos7-vim (7)再次启动私服容器 docker restart registry (8)上传标记的镜像 docker push 10.0.0.205:5000/centos7-vim

四、Docker-compose

4.1 docker-compose是什么?

复制代码
  • 1
  • 2
  • 3
  • 4
Docker Compose是一个能一次性定义和管理多个Docker容器的工具,python写的 单机容器编排,通过yaml文件 k8s 多机容器编排,谷歌公司开源的

4.2 安装docker-compose

复制代码
  • 1
  • 2
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose

4.3 docker-compose命令

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
# 启动管理容器 docker-compose up # 会自动搜索当前路径下的 docker-compose.yml文件 docker-compose -f 指定文件 up docker-compose up -d # 后台执行,一般我们看日志输出,不用这个 docker-compose stop # 停止,不会删除容器和镜像 docker-compose down # 停止,并删除关联的容器 docker-compose start # 启动yml文件管理的容器 docker-compose ps # 正在运行的容器 docker-compose images # docker-compose管理的容器 docker-compose exec yml文件中写的service /bin/bash # 进入到容器内

4.4 docker-compose代码示例

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
# 写flask项目app.py from flask import Flask from redis import Redis import os import socket app = Flask(__name__) # redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379) redis = Redis(host='redis', port=6379) @app.route('/') def hello(): redis.incr('hits') return '你好! 查看 %s 次, hostname 是 %s.\n' % (redis.get('hits'),socket.gethostname()) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000, debug=True) # 写Dockerfile文件 FROM python:3.6 COPY . /app WORKDIR /app RUN pip install flask redis -i https://pypi.tuna.tsinghua.edu.cn/simple EXPOSE 5000 CMD [ "python", "app.py" ] # 写docker-compose的yaml文件 docker-compose.yml version: "3" services: redis: image: redis web: build: context: . dockerfile: Dockerfile ports: - 8080:5000 environment: REDIS_HOST: redis # docker-compose up 启动管理容器

4.5 yaml文件示例

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
version: "3" services: nginx: image: nginx container_name: luffy_nginx ports: - "80:80" - "8000:8000" restart: always volumes: - ./luffycity/dist:/var/www/html - ./docker_compose_files/nginx:/etc/nginx/conf.d depends_on: - django networks: - web django: build: context: ./luffy_api dockerfile: Dockerfile container_name: luffy_django # command: python manage_pro.py makemigrations && python manage_pro.py migrate && uwsgi ./luffy.ini restart: always ports: - "8080:8080" volumes: - ./luffy_api:/soft environment: - TZ=Asia/Shanghai depends_on: - mysql - redis networks: - web redis: image: redis:latest container_name: luffy_redis ports: - "6379:6379" volumes: - ./docker_compose_files/redis/data:/data - ./docker_compose_files/redis/redis.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf networks: - web mysql: image: mysql:5.7 container_name: luffy_mysql restart: always ports: - "3306:3306" env_file: - ./docker_compose_files/mysql.env volumes: - ./docker_compose_files/mysql/data:/var/lib/mysql - ./docker_compose_files/mysql/logs:/var/log/mysql - ./docker_compose_files/mysql/conf:/etc/mysql/conf.d networks: - web networks: web: # 服务器:装docker,docker-compose git clone xxxxxx docker-compose up

4.6 一键部署前后端项目流程

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
# 第一步:在自己机器拉取项目,修改前端连接后端地址 export default { base_url: "http://10.0.0.205:8000/api/v1/" } #第二步:编译前端项目 npm run build # 第三步:把最新代码提交到git git push origin master # 第四步:在要部署的服务器上(提前安装docker,docker-compose) git clone 项目地址 cd luffy docker-compose up # 第五步:导入数据sql文件 # 第六步:在浏览器访问服务器80端口即可
posted @   马氵寿  阅读(662)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开