pymkl

 


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.镜像推送阿里云

 

分类:

技术点:

相关文章: