Docker基本操作与概念

 


docker >>> 操作容器

#************************* Centos7 安装docker ******************* # 参考:https://yeasy.gitbooks.io/docker_practice/install/centos.html # 将docker添加至用户组,不需要使用sudo命令 sudo groupadd docker sudo gpasswd -a $USER docker newgrp docker docker ps # 测试是否不需要sudo # 查看官方镜像 docker search --filter=is-official=true mysql #************************* MySQL容器 ************************** # 宿主机相关文件 mysql >> conf >> my.cnf # 配置文件 data # 挂载的数据库文件 logs # 挂载的日志文件 # 创建容器(mysql目录下执行):宿主机3306端口可能被宿主机占用 docker run -p 3307:3306 --name mysql_tsdrm -v $PWD/mysql/conf:/etc/mysql/conf.d -v $PWD/mysql/logs:/logs -v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.6 # 进入容器 docker exec -it mysql_tsdrm /bin/bash # 容器开启的状态下 # 复制sql文件至容器 docker cp /home/username/桌面/tesudrm.sql mysql_tsdrm:/ # 创建数据库/导入数据 mysql -uroot -p create dababase example charset=utf8; mysql -uroot -p example < tesudrm.sql # ************************* Redis容器 ************************** # 宿主机相关文件 redis >> conf >> redis.conf data # docker中redis默认无配置文件启动 # 配置文件redis.conf(根据需求自己配置,参数说明:https://www.cnblogs.com/qq78292959/archive/2013/09/21/3331032.html) requirepass tesunet daemonize no port 6379 # 启动/拉取redis:4.0,同时命名,同时挂载配置文件/数据文件至宿主机当前文件下(执行命令的位置) docker run -p 6378:6379 --name redis_tsdrm -v $PWD/redis/conf/redis.conf:/etc/redis/redis.conf -v $PWD/redis/data:/data -d redis:4.0 redis-server /etc/redis/redis.conf # 添加账户:requirepass tesunet # 认证: redis-cli: >> AUTH "tesunet" # ********************* Python镜像+django项目 ****************** # 宿主机相关文件 django_tsdrm >> requirements.txt >> TSDRM(项目) # settings.py mysql的host改成db,mysql_tsdrm表示mysql容器的名称(容器间通信)。 docker run -p 8000:8000 -v $PWD/django_data/TSDRM:/TSDRM --link mysql_tsdrm:db_server --link redis_tsdrm:redis_server --name django_tsdrm -itd username/tp_pro:1.1 (命令位置写错很麻烦) # 复制requiremens.txt至容器 docker cp requirements.txt django_tsdrm:/ # 进入容器 docker exec -it django_tsdrm /bin/bash # 安装依赖 pip3 install -r requirements.txt # 复制项目至容器 # 修改settings.py >>> redis/mysql的host改为:db_server/redis_server docker cp TSDRM django_tsdrm:/ # 运行项目 python manage.py runserver 0.0.0.0:8000 # 访问项目url http://ip:8000 # 运行celery/celery beat/celery flower python manage.py celery -A TSDRM worker -l info python manage.py celery -A TSDRM flower -l info python manage.py celery -A TSDRM beat -l info # ********************* uwsgi运行项目 ****************************** # 1.安装uwsgi pip3 install uwsgi # 2.配置uwsgi.ini [uwsgi] socket=0.0.0.0:8000 # 配置nginx代理时使用 #http=0.0.0.0:8000 chdir=/TSDRM #module=TSDRM.wsgi:application wsgi-file=/TSDRM/TSDRM/wsgi.py master=True process=4 pidfile=/TSDRM/TSDRM-master.pid vacuum=True max-requests=5000 daemonize=/TSDRM/log/wsgi.log static-map=/static=/TSDRM/static # 3.collectstatic命令收集静态文件至项目目录下 python manage.py collectstatic # 4.注释掉STATIC_ROOT,添加 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static") ] # 5.urls.py添加 from django.conf import settings from django.conf.urls.static import static urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) # 附: # 1.命令的方式启动 uwsgi --static-map /static=/TSDRM/static --http 0.0.0.0:80 --chdir /TSDRM --wsgi-file /TSDRM/TSDRM/wsgi.py # 2.配置文件的方式启动 uwsgi --ini uwsgi.ini # ********************** nginx容器 ************************* # 1.下载镜像/安装容器(将django项目里的static文件挂载至nginx容器中做静态文件代理) docker run -v $PWD/nginx/log:/var/log/nginx/ -v $PWD/nginx/nginx.conf:/etc/nginx/nginx.conf -v $PWD/django_data/TSDRM/static:/static --link django_tsdrm:django_server --name nginx_tsdrm -d -p 8888:80 nginx # 2.进入容器 docker exec -it nginx /bin/bash # 缺省的Nginx安装在/var/lib/nginx下,配置在/etc/nginx下面,包括nginx.conf主配置文件,conf.d和site-enabled是附加的配置文件。后面,我们将会该目录映射到宿主机目录,以便于修改和管理。 # 3.配置nginx worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 80; server_name localhost; charset utf-8; location / { include uwsgi_params; uwsgi_pass django_server:8000; uwsgi_param UWSGI_SCRIPT TSDRM.wsgi; uwsgi_param UWSGI_CHDIR /TSDRM; } location /static/ { alias /static/; } } } # ****************** 在django镜像中安装生成pdf文件的软件 wkhtmltopdf ************ # 1.在wkhtmltopdf官网下载指定系统的wkhtmltopdf安装包 容器中时debian,所以下载了:wkhtmltox_0.12.5-1.jessie_amd64.deb dpkg -i wkhtmltox_0.12.5-1.jessie_amd64.deb # 2.安装过程中需要以下依赖,通通下载通过dpkg安装,再去安装wkhtmltopdf xfonts-75dpi xfonts-base xfonts-utils libfontenc1 xfonts-encodings # 3.解决pdf中文显示问题 下载宋体:simsun.ttc 复制到容器的/usr/share/fonts/truetype/文件夹下 # *********************** 其他操作 ************************* 附录:使用第三方容器仓库:阿里云 docker login --username=username registry.cn-hangzhou.aliyuncs.com docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/tp_pro/tp_pro:[镜像版本号] docker push registry.cn-hangzhou.aliyuncs.com/tp_pro/tp_pro:[镜像版本号] docker pull registry.cn-hangzhou.aliyuncs.com/tp_pro/tp_pro:[镜像版本号] # 1.基于当前容器重新创建镜像 docker commit -m "初始化TSDRM项目" -a "username" -p django_tsdrm django_tsdrm:1.0 # -p表示提交时停止容器 # 2.上传mysql镜像 ·上传镜像(默认上传到Docker Hub官方仓库,需要登录) docker login # 为镜像添加新的标签 docker tag test:latest 用户名/test:latest # 上传镜像至仓库 docker push 用户名/test:latest # 此时,你的dockerhub就会多一个repository。 # 3.下载镜像,运行 tsdrm django_tsdrm >> requirements.txt >> TSDRM(项目) redis >> conf >> redis.conf data mysql >> conf >> my.cnf # 配置文件 data # 挂载的数据库文件 logs # 挂载的日志文件  setup.sh # 1.下拉启动镜像 docker pull username/tp_pro:1.0 docker pull username/tp_db:1.0 docker pull username/tp_cache:1.0 # 2.创建实例 docker run -p 3307:3306 --name mysql_tsdrm -v $PWD/mysql/conf:/etc/mysql/conf.d -v $PWD/mysql/logs:/logs -v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d username/tp_db:1.0 docker run -p 6378:6379 --name redis_tsdrm -v $PWD/redis/conf/redis.conf:/etc/redis/redis.conf -v $PWD//redis/data:/data -d username/tp_cache:1.0 redis-server /etc/redis/redis.conf docker run -p 8080:80 --link mysql_tsdrm:db_server --link redis_tsdrm:redis_server --name django_tsdrm -itd username/tp_pro:1.0 # 3.运行项目 / # 1.下拉启动镜像,同时运行多个命令 # 4.查看mysql与redis是否可用 import pymysql.cursors connection = pymysql.connect(host='db_server',user='root',password='password',db='tesudrm',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor) # 退出容器 exit或者ctrl+d退出的容器 # 启动容器 docker start mysql_tsdrm # 关闭容器 docker stop 容器id docker pause 容器id docker kill 容器id # 删除容器 docker rm # 查看容器 docker container inspect 容器id docker top 容器id docker stats 容器id docker ps -qa # ************** docker容器中安装命令(容器内置apt-get商店) # 1.使用国内源(先备份,后重新写入) mv /etc/apt/sources.list /etc/apt/sources.list.bak && \ echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list && \ echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list && \ echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list && \ echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list # 实践中发现需要重启实例或者宿主机,否则无法应用 # 2.更新apt-get商店 apt-get update # 3.安装apt apt install vim # 配置vim set hlsearch set backspace=2 set autoindent set ruler set showmode set nu "set bg=dark syntax on set paste if has( 'mouse' ) set mouse-=a endif set nocompatible set cursorline set nobackup apt install rpm apt install yum apt install net-tools https://cr.console.aliyun.com/ # ***************************** DockerFile ****************************** # 1.配置指令 ARG 创建镜像时使用的变量,创建后不再存在 FROM 基础镜像 ARG VERSION=9.3 FROM debian:${VERSION} LABEL 过滤镜像信息的条件:version/author/description EXPOSE 镜像内服务监听端口,只是申明,并没有端口映射 ENV 容器启动后依旧存在的环境变量 docker run --env可以覆盖 ENTRYPOSINT["param1", "param2"] 默认入口命令 exec调用执行 可以被--entrypoint覆盖 VOLUME 数据卷挂载点 VOLUME["/data"] USER WORKDIR 为RUN/CMD/ENTRYPOINT配置工作目录 WORKDIR /path/to/workdir ONBUILD STOPSIGNAL HEALTHCHECK SHELL # 2.操作指令 RUN 运行命令 CMD 启动容器时默认执行的命令 ADD 内容添加到镜像 ADD 宿主机相对路径 容器绝对路径 COPY 复制内容至镜像(推荐使用) # 3.创建镜像 docker build -t builder/first_image:1.0 /yemp/docker_builder/ -t 生成镜像的标签信息 -f 指定非上下文的Dockerfile路径

Django+uwsgi+mysql+redis容器部署

 一.docker基础
附1:Docker运行的后台操作:
·检查本地是否存在指定的镜像,不存在就从公有仓库下载;
·利用镜像创建一个容器,并启动该容器;
·分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
·从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去;
·从网桥的地址池配置一个IP地址给容器;
·执行用户指定的应用程序;
·执行完毕后容器被自动终止。
附2:简易(单容器)操作
·获取镜像
docker pull ubuntu:18.04
·重命名标签
docker tag ubuntu:18.04 my_ubuntu
·指定镜像新建/启动容器,但不进入容器。
docker run -itd my_ubuntu # 返回容器id
·选择容器id进入
docker exec -it 容器id /bin/bash
·容器操作
·启动容器
docker start/restart 容器id
·关闭容器
docker stop/kill 容器id
·暂停/取消暂停容器
docker pause/unpause 容器id
·删除容器
docker rm 容器id(-f 强制)
·查看容器
docker ps -a
·删除镜像
docker rmi 镜像名/或者id(-f 强制)
·清理镜像
docker image prune -f

1.概念
·镜像
只读模板。
·容器
简易版linux系统环境与应用程序打包而成的盒子。
从镜像启动时,会在镜像的最上层创建一个可写层。
·仓库
存放镜像,类似于Git代码仓库的概念。
2.安装
·windows 10
a.注册docker账号,邮箱激活,Get Docker
b.开启win10的Hyper-V,控制面板>程序>启动或关闭windows功能>选中Hyper-V。(自动重启)
c.下载docker,安装后自动注销windows。
d.邮件docker,设置Advanced磁盘位置或者CPU,内存等。
e.cmd启动终端(尝鲜):
docker info 查看docker信息
docker run hello-world 测试docker拉取镜像功能
docker run -it ubuntu bash 拉取/启动默认的Ubuntu容器
docker ps -a 查看所有容器
docker ps 查看运行中的容器
·Centos7 参考
1.centos7安装docker ce # 安装依赖包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加软件源 sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo # 更新缓存/安装docker ce  sudo yum makecache fast sudo yum install docker-ce 2.启动docker ce sudo systemctl enable docker sudo systemctl start docker 3.将docker加入用户组 sudo groupadd docker sudo usermod -aG docker $USER 4.测试docker docker run hello-world

5.镜像加速 阿里云加速镜像:dev.aliyun.com # 修改加速地地址 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://p731kmg8.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
docker info 可以查看是否注册成功!

 3.使用镜像("千层饼")
Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,会从默认镜像仓库下载(Docker Hub公共注册服务器仓库),
也可以通过配置自定义镜像仓库。
对文件系统的修改作为一次提交一层层叠加。
镜像为什么这么小?
精简的OS,只需要包括最基本的命令、工具和程序,底层直接用宿主机的kernel内核。
·获取镜像
docker pull ubuntu:18.04 (镜像名称:版本标签)如果不指定标签,默认选择latest标签。
docker pull hub.c.163.com/public/ubuntu:18.04 非官方仓库下载,名称前指定完整的仓库地址。
docker pull miaokela/mic_ubuntu 在自己的仓库拉取镜像
·pull子命令
-a, --all-tags=true|false 是否获取仓库中所有镜像,默认为否
--disable-content-trust 取消镜像的内容校验,默认为真
--registry-mirror=proxy_URL 指定镜像代理服务地址
·使用镜像
docker run -it ubuntu:18.04 bash
·查看镜像信息
docker images/docker image ls
所在仓库/版本标签/id/创建时间/大小
·image子命令
-a,--all=true|false 列出所有镜像文件,默认为否
--digests=true|false 列出镜像数字摘要,默认为否
-f,--filter=[] 过滤镜像,比如:dangling=true只显示没有被使用的镜像
--format="TEMPLATE" 控制输出格式
--no-trunc=true|false 对输出结果中太长部分进行截取
-q,--quiet=true|false 仅输出ID信息,默认为否
·使用tag命令添加新的镜像标签
docker tag ubuntu:latest mic_ubuntu
# docker images查询时会多一个id相同的镜像
·inspect命令(查看详情信息)
docker inspect mic_ubuntu
# 制作者/适应架构/各层的数字摘要等
·history命令查看镜像历史
docker history mic_ubuntu
# 命令过长会自动截取部分,--no-trunc选项输出完成命令
·搜索镜像
docker search --filter=is-official=true nginx 搜索官方提供带nginx关键字的镜像
docker search --filer=stars=4 tensorflow 搜索所有收藏数超过4的关键词包括tensorflow的镜像
# 名字/描述/收藏数/是否官方创建/是否自动创建等
·子命令
-f,--filter filer 过滤输出内容
--format string 格式化输出内容
--limit int 限制输出结果个数,默认为25个
--no-trunc 不截断输出结果
·删除/清理镜像
·使用标签删除镜像
docker rmi或者docker image rm
docker rmi mic_buntu:latest
-f,-force 强制删除镜像
-no-prune 不要清理未带标签你的父镜像
·使用镜像ID删除镜像
# 不推荐使用-f参数来强制删除一个存在容器依赖的镜像。
# 正确做法:先删除依赖该镜像的所有容器,再来删除镜像!!!!!!!
docker rm 容器
docker rm 镜像ID
·清理镜像
docker image prune -f
-a,-all 删除所有无用镜像
-filter filter 清理过滤的容器
-f, -force 强制删除镜像,无需确认
·创建镜像
·基于已有镜像容器创建
docker [container] commit
选项:
-a, --author="" 作者信息
-c, --change=[] 提交时执行的Dockerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等
-m, --message="" 提交消息
-p, --pause=true 提交时暂停容器运行
示例:
a.启动已有镜像
docker run -it mic_ubuntu # 记住容器id(root@容器id)
b.在原有镜像中做一些修改,比如你安装了mysql等。
c.提交镜像
docker [container] commmit -m "提交信息" -a "作者信息" 容器id 镜像名称:版本标签
·基于本地模板导入
a. 下载OpenVZ提供的模板,http://openvz.org/Download/templates/precreated
b. cat ubuntu-18.04-x86_64-minimal.tar.gz|docker import - ubuntu:18.04
·基于Dockerfile创建
# 利用给定的指令描述基于某个父镜像创建新镜像的过程。

·存出/载入镜像
·存出压缩包
docker save -o ubuntu_18.04.tar mic_ubuntu
# 就可以复制ubuntu_18.04.tar分享给他人。
·载入镜像
docker load -i ubuntu_18.04.tar
或者:docker load < ubuntu_18.04.tar
·上传镜像(默认上传到Docker Hub官方仓库,需要登录)
# 为镜像添加新的标签
docker tag test:latest 用户名/test:latest
# 上传镜像至仓库
docker push 用户名/test:latest
# 此时,你的dockerhub就会多一个repository。
·docker中ubuntu镜像没有ifconfig与ping命令
apt-get update
apt-get install net-tools
apt-get install iputils-ping
4.操作Docker容器
# 容器无状态保持,需要重新保存。
# 容器就是镜像的一个运行实例。
·创建容器
·新建容器
docker create -it ubuntu:latest
# 创建之后通过docker ps -a可以查询的该容器的Created状态。
·create选项
·启动容器
docker start 167c1e27c306 # 此时状态为Up,再次停止之后的状态为Exited。
·新建并启动容器
docker run -it ubuntu:18.04
# 等价于docker create -it ubuntu:latest + docker start 167c1e27c306
·-it
-i 让容器的标准输入打开。
-t 让Docker分配一个伪终端,绑定在容器标准输入上。
·守护态运行
docker run -d ubuntu:18.04 /bin/sh shell_cmd
Docker容器后台运行,就必须有一个前台进程,所以docker ps -a查看容器已经退出。
·查看容器输出
docker logs 167c1e27c306
·选项
-details 详细信息
-f, -follow 持续保持输出
-since string 输出从某个时间开始的日志
-tail string 输出最近的若干日志
-t, -timestamps 显示时间戳信息。
-until string 输出某个时间之前的日志
·停止容器
·暂停容器
docker pause 容器id
# 状态为Up(Paused)
docker unpause # 取消暂停状态
·终止容器
docker stop 容器id
·清除所有停止状态的容器
docker container prune
·强行终止容器
docker kill 容器id
·exit或者ctrl+d退出的容器处于stopped状态
·查看所有容器id
docker ps -qa
-l 上次运行的容器

·进入容器
·attach命令
# 先新建/启动容器 -d 表示直接进入后台,不能进行其他操作
docker run -itd mic_ubuntu
# 后进入容器
docker attach 容器id
·选项:
--detach-keys[=[]] 指定退出attach模式的快捷序列,默认是ctrl-p ctrl-q
--no-stdin=true|false 是否关闭标准输入,默认是保持打开
--sig-proxy=true|false 是否代理收到的系统信号给应用进程,默认是true
·exec命令(推荐)
docker exec -it 实例id /bin/bash # 容器开启的状态下
·选项
-d, --detach 在容器中后台执行命令
--detach-keys="" 指定将容器切回后台的按键
-e, --env=[] 指定环境变量列表
-i, --interactive=true|false 打开标准输入接受用户输入命令,默认为false
--privileged=true|false 是否给执行命令以高权限,默认为false
-t, --tty=true|false 分配伪终端,默认值为false
-u, --user="" 执行命令的用户名或者ID
·删除容器
docker rm # 只能删除终止或退出状态的容器,可以添加-f强制删除运行的容器。
·导入导出容器
·导出容器
# 导出容器到一个文件,通过-o指定tar文件。
docker export -o test_for_fun.tar 容器id
# 或者:
docker export 容器id > test_for_stop.tar
·导入容器至仓库
docker import test_for_run.tar - 用户名/ubuntu:18.04
·与docker load的区别在于import 会丢弃历史记录和元数据信息。
·查看容器
·详情
docker container inspect 容器id
·进程
docker top 容器id
·统计信息
docker stats 容器id
·选项:
-a, -all 输出所有容器统计信息
-format string 格式化输出信息
-no-stream 不持续输出
-no-trunc 不截断输出信息
·容器其他命令
·复制文件
docker cp 本地data 容器id:/temp/
·查看更变
docker container diff 容器id
·查看端口映射
docker container port 容器id
·更新配置
docker update 容器id
·选项:

5.Docker仓库
·Docker Hub公共镜像市场
docker pull ubuntu:18.04
·第三方镜像市场
docker pull hub.c.163.com/public/ubuntu:18.04
·搭建本地私有仓库(没有测试成功)
·通过registry镜像创建私有仓库
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry:2
-v 指定镜像存放路径。
·管理私有仓库
docker images
# 修改镜像标记
docker tag ubuntu:18.04 47.95.195.90:5000/用户名/mic_ubuntu:18.04
docker push 47.95.195.90:5000/用户名/mic_ubuntu:18.04
·较新版本Docker对安全性较高,需要支持SSL/TLS整数,所以不进行安全整数检查
# 修改Docker daemon启动参数
DOCKER_OPTS="--insecure-registry 47.95.195.90:5000"
# 重启Docker服务,下载镜像
service docker restart
docker pull 49.95.195.90/用户名/mic_ubuntu:18.04
6.Docker数据管理(持久化)
·数据卷
容器内数据直接映射到本地主机环境。
·创建数据卷(本地)
docker volume create -d local test
·查看数据卷
ls -l /var/lib/docker/volumes
·其他操作
docker volume inspect 查看详细信息
ls 列出已有数据卷
prune 清理无用数据卷
rm 删除数据卷
·绑定数据卷(绑定至容器)
# 创建容器时,将本地任意路径挂载到容器中作为数据卷。
·类型:
volume 普通数据卷,映射到主机/var/lib/docker/volumes路径下
bind 绑定数据卷,映射到主机指定路径下
tmpfs 临时数据卷,存在内存中
docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
·解释:
--mount 挂载
type 指定类型
source 指定容器内路径,可以是相对路径,不存在则创建
destination 指定本地绝对路径
training/webapp 镜像名
-d 表示创建容器后直接转至后台,不进行其他操作
·只读数据卷:ro
docker run -d -P --name web -v /webapp:/opt/webapp:ro training/webapp python app.py
  # -v 如果启动容器没有指定数据卷/尚不存在数据库,会自动创建一个数据卷,所以下次启动时写数据卷的名称:
docker run -p 3307:3306 --name test_mysql -v volume_name:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=password -d mysql:5.6
# 查看容器数据卷
docker volume ls
docker inspect volume_name
# 停止容器并移除数据卷
docker container stop container_id
docker container rm container_id
docker volume rm volume_name

·数据卷容器
使用特定容器维护数据卷,多个容器之间共享一些持续更新的数据。
·创建数据卷容器,在其中创建数据卷挂载到指定目录
docker run -it -v /dbdata --name dbdata ubuntu
创建容器 挂载容器内目录 命名容器 镜像名

·查看容器目录
ls /dbdata
·--volumes-from在其他容器中挂载指定容器的数据卷
docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdate --name db1 ubuntu
·数据卷容器数据备份/恢复
·备份
docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
·解释:
用ubuntu进行镜像创建一个worker容器,让worker容器挂载dbdata容器的数据卷,
使用-$(pwd):/backup 来关联本地当前目录到worker容器的/backup目录
·恢复
# 恢复数据到一个容器
·创建一个带有数据卷的容器
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
·创建新的容器,挂载dbdata2的容器,并解压备份文件到所挂载容器卷中
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar


实际案例:

 

·MySQL容器
·获取MySQL镜像
docker pull mysql:5.7.25
·创建Mysql实例容器
docker run --name my-mysql
-v /host_mysql/conf:/etc/mysql/conf.d # 数据卷挂载,宿主机与容器共享数据
-v /host_mysql/logs:/logs
-v /host_mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=password
-d mysql:5.7.25

·上传备份好的数据库文件:my_pro.sql
# 备份数据库
mysqldump -uroot -p db_name > my_pro.sql
# 上传
docker cp my_pro.sql 容器id:/容器路径/
·导入mysql数据
mysql -uroot -p db_name < my_pro.sql
·检测mysql数据查询情况
import pymysql.cursors
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('webmaster@python.org',))
result = cursor.fetchone()
print(result)
finally:
connection.close()
*Redis容器
docker run -p 6379:6379

-v /host_redis/data:/data
-v /host_redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
-d redis:3.2 redis-server /usr/local/etc/redis/redis.conf
--appendonly yes # 持久化lef

本地镜像推送到阿里云

1.创建阿里云仓库镜像

2.镜像推送阿里云

 

记录自己的学习历程!

原文链接:https://www.cnblogs.com/miaokela/articles/10477833.html

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享