上节回顾

# 1 docker 启动,停止,查看状态命令
systemctl start docker
systemctl stop docker
systemctl status docker
docker info # 查看详情
systemctl enable docker # 开机自启动 # 2 配置镜像源,拉取镜像时,速度快
vim /etc/docker/daemon.json
# 阿里云的:每个账户会分配 # 3 镜像操作
-搜索镜像:在网站上搜索
-拉取镜像 docker pull 镜像名字:标签
-查看本地镜像 docker images 或者 docker image ls
-删除镜像 docker rmi 镜像id号
-一次性删除所有镜像 docker rim `docker images -p` # 4 容器操作
-查看正在运行的容器 docker ps
-查看所有容器 docker ps -a -创建并运行容器
docker run -id/it --name=名字 -p 8080:8080 -p 80:80 -v /home/lqz:/lqz 镜像名字:标签 -在容器上执行命令
docker exec 容器id 命令
docker exec -it 容器id /bin/bash # exit 退出

今日内容

容器技术做的是进程隔离。

将mysql进程给包了一下,做了网络隔离,看起来就像是在一个虚拟机中一样(本质上是进程的隔离技术)

1 容器操作

# 启动容器
docker start 容器id
# 停止容器
docker stop 容器id # 文件拷贝
# 容器的文件copy到宿主机上(不是在容器内执行)
docker cp 容器名称:容器目录 需要拷贝的文件或目录
docker cp 20fd8:/home/lqz.txt /home/lqz.txt
# 宿主机的文件copy到容器中
docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp ./lqz.txt 20fd894a3f20:/home/lqz.txt # 查看容器IP地址
docker inspect 容器名称 # 查看容器的详细描述,很多
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID) # 在多个容器之间是可以ping通的
# centos:172.17.0.3
# mysql:172.17.0.2 # 删除容器(删除已停止的容器)
docker rm 容器id
docker rm `docker ps -a -q` # 无状态的服务
-myslq reids
-uwsgi+django

将宿主机文件复制到容器:

这样会报错,这是因为容器内部没有zz目录:

由于是复制过来的,在宿主机修改不会影响到容器。

将容器文件复制到宿主机:

如果宿主机已经存在同名文件,会怎么样?

会没有提示,直接覆盖。

查看容器IP地址:

环境变量:宿主机和容器里都有环境变量。

docker如何实现网络隔离?本质是基于linux线程做了封装。

容器之间Ping:(在多个容器之间是可以Ping通的)

由于容器尽可能的轻量,所以可能没有ping命令,这时候就需要下载net-tools,net-tools包含ping命令。

ubt系统使用apt-get命令下载net-tools:

2 应用部署

2.1 mysql 部署

docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 做目录映射:data文件,配置文件
# 创建文件夹
mkdir /home/mysql
mkdir /home/mysql/conf.d
mkdir /home/mysql/data/
vim /home/mysql/my.cnf
[client]
default-character-set=utf8
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000 docker run -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # 创建库,创建表,插入数据 # 关闭容器,删除容器,myslq的容器没了,但是数据在宿主机上放着 # 再运行起一个容器,做好目录映射,数据都回来了

mysql容器底层不是centos(yum) 可能是wubantu(apt-get):

不建议mysql在docker中运行,docker建议运行无状态的服务,向mysql这种会在运行过程中产生数据的,属于有状态的服务:

相当于是容器内部操作外部的文件,容器删了只是删除自己,不是删除容器外部的文件。

水平扩展:

一台机器多个容器(docker-compose)。多台机器容器编排(k8s)。容器的网络是可以配置的。实现多个容器使用一个配置文件。
容器要运行,必须有一个守护进程在前台运行 ,如果是-id命令启动容器, 会一直保持一个守护进程在阻塞。
远程连接数据库 用容器新建个数据库 做目录映射
做目录映射的作用是:删除容器,数据、配置文件都还在宿主机器,只需要在启动一个容器,数据就又有了,不会随着容器的删除而删除。
为什么起一个mysql镜像 然后做端口映射 就可以从远程访问 这个mysql服务了?

2.2 redis

# 拉取redis镜像
docker pull redis
mkdir /root/data
vim /root/redis.conf bind 0.0.0.0
daemonize NO
protected-mode no
requirepass 123456 # 运行(推荐)
docker run -id -p 6379:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis redis-server /etc/redis/redis.conf # 这样容器不会一直运行而是直接结束
docker run -id -p 6379:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis # 创建一个守护进程,使得容器不会自动结束,而是自动运行
docker run -id -p 6379:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis /bin/bash # 启动不了可以查看错误日志 排查错误
docker logs redis # 远程链接redis操作

redis配置文件:

bind 0.0.0.0
daemonize NO
protected-mode no
requirepass 123456

后续需要配置redis持久化的路径,也就是说容器内部的redis存储数据不一定会存储在/data目录下

使用redis-cli远程连接:

2.3 nginx

# 拉取nginx镜像
docker pull nginx # run起容器
# docker run -id --name nginx -p 80:80 nginx # /usr/share/nginx/html
docker run -id --name nginx -p 80:80 -v /root/html:/usr/share/nginx/html nginx
# 以后只需要修改宿主机的/root/html 路径,看到页面就是修改后的

做目录映射:

在宿主机器添加index 做目录映射 让nginx使用这个index。

如何快速让别人运行你的项目?

将所有Mysql redis等依赖,包在一个docker容器中。但是实际上不建议在一个docker容器中运行多个服务,而是一个服务运行在一个容器内。

docker-compose单机容器编排。

centos的系统使用了 python,也就是自带python2.7的环境:

将容器打包成镜像:可以镜像打标签。注册中心就是远程仓库。

3 迁移与备份

# 容器保存为镜像
-运行一个centos容器
docker run -id --name centos_vim centos:7
-在容器中装vim
docker exec -it a6e240 /bin/bash
yum install vim -y -把容器做成镜像(centos+vim)
docker commit centos_vim centos_vim_image -把centos_vim 容器删除
docker rm centos_vim
-基于新构建的镜像,运行成容器
docker run -id --name centos_vim centos_vim_image:latest
-进入到容器中,查看,软件都在
docker exec -it id号 /bin/bash # 镜像备份和恢复
docker save -o centos_vim_image.tar centos_vim_image
-删除容器,删除镜像
-把备份的镜像恢复
docker load -i centos_vim_image.tar

4 Dockerfile


'''
ockerfile通过一个文件,根据文件的内容进行构建镜像。dockerfile命名必须得是这个名字。docker run的时候会执行 cmd 加入的命令。也就是容器内部也要执行你CMD设置的命令。
'''# 镜像从哪里来的?
1 远程仓库拉取的 docker pull
2 用容器做成的镜像 docker commit
3 把备份的恢复 docker load
4 使用Dockerfile来构建
# 什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本文件,这些命令应用于基础镜像并最终创建一个新的镜像 # Dockerfile的命令
FROM 基础镜像 #基于哪个基础镜像来构建
MAINTAINER lqz # 声明镜像的创建者
ENV key value # 设置环境变量 (可以写多条)
RUN command #是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file #将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file # 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR lqz # 设置工作目录,运行起这个容器,来到的路径就是这个路径 # 构建一个带vim的centos镜像
vim Dockerfile FROM centos:7
MAINTAINER lqz
ENV name lqz
RUN yum install vim -y
RUN mkdir /lqz
RUN touch /lqz/ss.py
RUN echo 'print(1)' >/lqz/ss.py
COPY /root/redis.conf /lqz/redis.conf
WORKDIR /lqz # 基于dockerfile构建镜像
docker build -t='centos_lqz_vim' . # 基于这个镜像运行容器
docker run -id --name xx centos_lqz_vim
# 进入到容器
docker exec -it xx /bin/bash
# 验证vim,和文件夹,文件是否存在 '''
1.Dockerfile通过一个文件,根据文件的内容进行构建镜像。
2.Dockerfile命名必须得是这个名字。docker run的时候会执行 cmd 加入的命令。
3.也就是容器内部也要执行你CMD设置的命令。
'''

练习

使用Dockerfile构建一个运行django程序的镜像

django 的helloworld  --》压缩包

基于Python3.8 构建一个能够运行你这个程序的镜像
FROM python:3.8
MAINTAINER lqz
RUN pip install django==3.2.2
ADD 压缩包
WORKDIR /lqz docker run -id -p 8080:8080 --name xx djago python manage.py runserver 0.0.0.0:8080 # 面试题
1 什么是迭代器,生成器,装饰器
2 django的信号用过吗?如何用,干过什么
3 Dockerfile用过吗?常用命令有哪些

【Docker】容器操作 mysql部署 redis部署 nginx部署 迁移与备份 Dockerfile的更多相关文章

  1. docker 容器操作、应用部署、mysql,redis,nginx、迁移与备份、Dockerfile

    容器操作 # 启动容器 docker start 容器id # 停止容器 docker stop 容器id # 文件拷贝 先创建文件 mkdir:文件夹 vi vim touch:文件 # 容器的文件 ...

  2. Docker容器中MySQL最大连接数被限制为214的解决方案

    原文:Docker容器中MySQL最大连接数被限制为214的解决方案 一.背景 话说笔者在上次的博客里简单的讲了一下调整MySQL最大连接数的方法.在文章的最后笔者提到了还有一些特殊情况比如说Dock ...

  3. Docker容器内Mysql大小写敏感方案解决

    Docker容器内Mysql大小写敏感方案解决 一.(lower_case_table_names)参数说明 二.Docker 部署 MySql 并修改为大小写不敏感 2.1直接在Docker启动的时 ...

  4. 06 python操作MySQL和redis(进阶)

    python操作mysql.redis 阶段一.mysql事务 主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息, ...

  5. Docker容器启动Mysql,Docker实现Mysql主从,读写分离

    Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...

  6. Docker 基本操作(附 redis、nginx部署)

    下载安装 Docker 也有一个月了.中间看过几次也没有深入的了解研究.就只是拉取了两个镜像简单的看了看. 昨天因一个项目中需要用到 Redis ,因为是 Windows 系统,看了下安装包比较老了有 ...

  7. Docker网络讲解 及实验redis集群部署

    理解docker0 准备工作:清空所有的容器,清空所有的镜像 docker rm -f $(docker ps -a -q) # 删除所有容器 docker rmi -f $(docker image ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  9. 三十九.NoSQL概述 部署Redis服务 、 部署LNMP+Redis

    1. 搭建Redis服务器 在主机 192.168.4.50 上安装并启用 redis 服务 设置变量test,值为123 查看变量test的值   1.1 搭建redis服务器 1.1.1 安装re ...

  10. Docker 学习之mysql与redis(二)

    在上一随笔中主要就是记录docker的基本使用以及nginx与php服务器的配置:在这一章将主要记录docker安装mysql与redis. 本节随笔参考网址:https://www.runoob.c ...

随机推荐

  1. CSP-S 考前备战——常考知识点串烧

    1.树形结构 与 树形dp PS :在CSP-S 2019,CSP-J 2020,CSP-S 2020,CSP-S 2021 均有考查 此类问题的做题方法就是将问题转化成树上的问题,然后进行深度优先遍 ...

  2. 2022.7.16 lhm_ 讲课纪要

    前言 啊好的,这节课又是对牛弹琴课...... 虽说题给的不难,以黄绿为主,,穿插了一个蓝一个紫,但是给一群不知道什么是树什么是DAG的人讲树形dp和dag上dp有点.... 顺便讲了讲拓扑排序和记忆 ...

  3. 车的可用捕获量(3.26leetcode每日打卡)

    在一个 8 x 8 的棋盘上,有一个白色车(rook).也可能有空方块,白色的象(bishop)和黑色的卒(pawn).它们分别以字符 "R",".",&quo ...

  4. HelloJs

    JS 轻量级脚本语言,也是嵌入式语言,是一种对啊想模型语言,简称JS 想要实现复杂的效果,得依靠宿主环境提供API,最常见的是浏览器,还有服务器环境(操作系统) 语言机构+宿主环境提供的API 写js ...

  5. CentOS(7.6)环境下迁移Mysql(5.7)的data目录到指定位置

    第一步:关闭Mysql #关闭Mysql服务systemctl stop mysqld#查看Mysql服务状态 ps -ef|grep mysql 第二步:创建新目录,并拷贝数据文件 #创建data文 ...

  6. HDU 1108

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  7. Charles对Android手机Https请求的抓包

    Charles对Android手机Https请求的抓包 • 前情提要: 本文只是对android手机进行抓包的描述,由于android手机系统原因,android7.0系统及以上需要在app中配置证书 ...

  8. flask上下文、g变量、current_app

    在flask中的上下文分为两种 : 请求上下文 (request context) 也就是和请求相关的上下文,记录一些请求相关的数据. 包含: 1.request请求对象 2.session会话 应用 ...

  9. DBeaver连接国产数据库OceanBase,以及Python连接,解决ModuleNotFoundError: No module named '_jpype'

    DBeaver连接OceanBase 参考:https://www.modb.pro/db/365929 用户名的格式为: 数据库用户名@租户名#集群名 Python连接OceanBase 参考:ht ...

  10. mysql的CRUD操作实现

      插入语句(INSERT):一旦我们选择了要插入的字段,   我们就必须保证要插入的数值和选择的字段的个数,顺序,类型一致. 1:怎么插入一条数据: INSERT INTO 插入的表名称(列名1,列 ...