docker-01

一、应用部署-mysql部署

在宿主机上不需要安装mysql了,可以直接拉取mysql镜像运行成容器即可

为了防止把容器删除了,容器里的数据都没了的情况,我们做个目录映射,这样容器删掉了下次再起一个容器进行关联就可以

部署步骤

1、创建文件夹

  • mkdir /root/mysql
  • mkdir /root/mysql/conf.d    (配置文件的路径)
  • mkdir /root/mysql/data/     (数据文件的路径)

2、基于镜像运行成容器(端口映射,目录映射)

  • docker run -id --name=mysql3 -p 3306:3306 -v /root/mysql/conf.d:/etc/mysql/conf.d -v /root/mysql/data/:/var/lib/mysql -v /root/mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 
    • -e是指定环境变量
  • 运行mysql 需要传入环境变量
    • MYSQL_ROOT_PASSWORD #root超级管理员的密码

3、新建mysql配置文件

  • 在mysql文件夹下   touch my.cnf   vim my.cnf
[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
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

4、运行2 的命令

5、远程链接mysql ,创建库,创建表

6、在容器中链接mysql,可以看到库和表

7、删除容器

8、创建一个新容器,数据还在[一定要做目录映射]

在宿主机上的centos装了docker,docker拉了个mysql的镜像,跑起来个mysql的容器,做了个目录映射和端口映射

面试小问题:如果有人问你mysql是否部署在容器里?

我们是放在容器里,但是我们知道数据安全问题性能问题,因为我们数据量本身不是特别大,用户就几十万上百万个用户,可以应对的。

二。redis部署

部署步骤

1、拉取redis镜像

2、创建文件夹和文件

  • mkdir reids
  • mkdir reids/conf
  • mkdir reids/data
  • vim ./reids/conf/redis.conf     

3、配置文件

  • bind 0.0.0.0
  • daemonize NO
  • protected-mode no
  • requirepass 123456

docker命令

low一些体现不出你的水平,没有做目录映射

  • docker run -di --name=myredis -p 6379:6379 redis

好一点的

  • docker run -id -p 6379:6379 --name redis_6379 -v /root/reids/conf/redis.conf:/etc/redis/redis.conf -v /root/reids/data:/data redis  redis-server /etc/redis/redis.conf --appendonly yes

三、部署Nginx

部署步骤

1、拉取Nginx镜像

2、docker命令

  • docker run -id --name=nginx -p 80:80 nginx

3、从win机器浏览器可以访问:10.0.0.205:80

4、今日容器内部,修改index    /usr/share/nginx/html

5、修改index.html

  • vi  vim都没有,安装发现yum也没有,它不是centos 
  • apt-get update
  • apt-get install vim

6、访问,发现页面变了

四、迁移与备份

4.1容器做成镜像

把容器打包成镜像——>容器中装了很多软件

  • python镜像,基于debain做的
  • 基于centos ,装python3.8解释器——>镜像——>放到网上给别人用

咱们案例,基于ngixn+vim+index改了的 做成镜像

  • docker commit 427066d078c3 nginx_vim

基于自己做的镜像,运行成容器

  • docker run -id --name=xxx -p 8080:80 nginx_vim:latest

4.2把镜像备份成压缩包

把镜像做成tar文件

  • docker save -o mynginx.tar nginx_vim

把压缩包load成镜像

  • docker load -i mynginx.tar

五、Dockerfile(重要)

解释:Dockerfile是由一系列命令参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像,文件名必须叫Dockerfile

镜像都哪里来的?

  • 1、远程仓库下载的(用的较多)
  • 2、容器做的
  • 3、xx.tar解压出来的
  • 4、通过dockerfile构建(用的较多)
    • 普通文件,文件中写了很多命令,根据这些命令创建出镜像来

常用命令

命令 作用
FROM image_name:tag 基于哪个基础镜像来构建
MAINTAINER user_name 声明镜像的创建者
ENV key value

设置环境变量 (可以写多条)

比如说:ENV DB_PASSWORD curry666  运行容器 -e参数指定 -e DB_PASSWORD=xxxx

RUN command 是Dockerfile的核心部分(可以写多条)  command就是linux命令
ADD 宿主机路径文件  容器路径文件 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY 宿主机路径文件  容器路径文件

宿主机的文件复制到容器内

和ADD相似,就是不会自动解压

WORKDIR path_dir

设置工作目录

举例子:docker exec 进入到容器规定到某个路径下

CMD   命令

 运行容器默认执行的命令,它可以被替换

CMD:添加启动容器时需要执行的命令。多条只有最后一条生效。可以在启动容器时被覆盖和修改

5.1简单案例基于centos创建一个镜像,里面带vim软件

Dockerfile

FROM centos:7
MAINTAINER curry
WORKDIR /home
RUN yum install -y vim
RUN mkdir lqz
ADD ./xx.txt ./yy.txt

构建镜像

docker build -t='centos_curry_vim' .

5.2制作django项目的镜像,运行

部署步骤

1、books项目准备好

2、在项目路径下编写Dockerfile

        FROM python:3.8
        MAINTAINER curry
        WORKDIR /soft
        COPY ./requirements.txt /soft/requirements.txt
        RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simple
        CMD ["python","manage.py","runserver","0.0.0.0:8080"]

3、把books代码提交到git

4、部署项目的机器,clone 项目

  • git clone https://gitee.com/liuqingzheng/books.git

5、cd books 文件夹下,执行构建镜像命令

  • docker build -t='django_books' .

6、有个镜像django_books,运行成容器

  • docker run -id --name=books -v /root/books:/soft -p 8080:8080 books_django:latest

7、win操作系统的浏览器中访问虚拟机地址,就可以访问项目了

8、继续开发项目,改了代码,提交到git

9、部署项目的机器,拉去最新代码

10、重启docker容器即可(第三方依赖变了)--》重写构建镜像,运行容器

posted @ 2022-12-20 20:49  初学者-11  阅读(18)  评论(0编辑  收藏  举报