1008.Django项目用户功能之docker

发布时间 2023-05-31 18:22:05作者: 興華

docker跟virtualbox一样:是一个虚拟软件,可以创建多个程序的运行环境。

docker与virtualbox的差别:docker不会虚拟出自己的内核,而是直接使用宿主机的内核。

为什么要用docker? 

集群:分布式相关的环境使用和部署

mysql长沙  mysql北京  mysql上海  数据同步,可以相互提供数据服务,而一旦某一个地方服务器崩溃,例如上海服务器崩溃了,那么可以从其他地方的服务器提供数据服务。

mysql分布式集群

那在需要多环境开发,需要多台服务器时,就可以用doeker构建各种分布式开发环境。

Docker

开源的应用容器引擎,容器是完全使用沙箱(网络编程虚拟执行环境)机制,相互之间是不会有任何接口,独立的。

1. 帮助我们构建构建多个各种的开发环境,让我们进行开发和测试

2. 容器里面的文件,同步到本地不需要像virtualbox那样下载并配置等

Docker组成

1. 镜像image--镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,可以通过镜像创建多个容器服务;

2. 容器container--利用容器技术,独立运行一个或者一组应用,通过镜像来创建的;

3. 仓库--存放镜像的地方,分为公有仓库和私有仓库,Docker Hub(默认是国外的)。

Docker特点:

1. 轻便--容器内应用直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了;

2. 快捷--让应用可以更快速的交付和部署;

3. 隔离--每个容器是相互隔离的,每个容器内都有一个属于 自己的文件系统,相互影响;

4. 高效--更高效的计算资源利用,在同一硬件上运行更多工作负载。

Docker安装与卸载

安装:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun     参考:https://www.runoob.com/docker/ubuntu-docker-install.html

测试是否安装成功:sudo docker version  查看docker信息

卸载--删除安装包:sudo apt-get purge docker-ce

卸载--删除镜像、容器、配置文件等内容:sudo rm -rf /var/lib/docker

阿里云镜像加速:登录阿里云找到容器服务,找到镜像工具里面的镜像加速器,配置使用,参考:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

镜像

su root 切换值root用户,在运行docker run hello-world,即可创建并运行hello-world镜像

1. 列出镜像

① 前提--有对应的镜像才可以创建对应的容器

②新建容器并启动 docker run [可选参数] image --name:容器名称 -d:后台运行 -it:使用交互方式运行,并进行容器 -p: ip:主机端口以及容器端口

示例: docker run -it nuuntu /bin/bash

docker images  [ -a/-aq  ]当前运行的docker镜像list

2. 查找镜像

docker search  dockername  可查看官方对应dockername所有镜像以及下载量信息

NAME 镜像名   DESCRIPTION 镜像的描述   OFFICIAL  是否docker官方发布  STARS 类似Github里面的start,表示点赞,喜欢的意思  AUTOMATED:自动构建

3. 拉取镜像

docker pull mysql    直接下载罪行版本的mysql,其他镜像同样方式

docker pull mysql:5.7 拉取5.7版本的mysql

4. 删除镜像

docker rmi -f  dockername/IMAGE ID   删除对应的镜像

docker rmi -f  'docker images -ap'  删除所有镜像

容器

1. 创建容器

docker run [可选参数] 搜索创建镜像    可选项:--name:容器名称   -d:后台方式运行   -i:交互式操作   -t:终端   -p:制定容器的端口

docker run -it ubuntu /bin/bash     

要退出终端,直接输入exit退出。

2. 查看容器

docker ps  查看正在运行的容器

docker ps -a  查看所有的容器

docker ps -n=1 查看最近的n个容器

docker ps -aq  查看所有容器的id

3. 启动停止进入

docker start 容器id   启动

docker restart 容器id  重启

docker attach 容器id  从容器退出,并停止容器

docker exec -it 容器id  容器command   从容器退出,但容器并不退出

docker stop 容器id    停止容器,暂停,内存还在

docker kill  容器id    干掉容器,内存释放

docker top 查看容器的进程

4. 删除容器

docker rm 容器名/id   删除某个容器

docker rm -f  ‘[sudo] docker ps -aq’    删除所有容器

docker ps -aq | xargs sudo docker rm -f    删除所有容器

主机与容器文件传输

docker cp  容器要传输文件的地址:主机地址         主机上传到容器,对调一下即可 

docker cp  主机地址:容器要传输文件的地址   

容器数据卷

1. 概述

如果数据都在容器中,那么我们容器删除,数据就会丢失!  Mysql,容器删除==删库跑路!

需求:数据可以持久化,存储在本地,所有我们需要容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地!

这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面。

2. 使用:具名和匿名挂载

具名挂载:docker run 【可选参数】 -v 主机目录:容器目录

docker run -it --name ubuntu01 -v /home/docker/ubuntu02:/home ubuntu /bin/bash   将容器ubuntu在home下的文件挂在主机/home/docker/unubtu2文件夹下

touch test.py    在docker容器中进行文件创建的命令

匿名挂载: -v 容器内路径        比较少用,因为随机的,但可以查询所有挂载信息查询到对应信息 docker inspect 容器名

具名挂载: -v卷名:容器内路径

指定路径挂载: -v 宿主机路径:容器内路径   

3. 查看容器元数据

docker inspect 容器

操作案例

mysql:5.7 镜像挂载操作流程

1. 拉取mysql:5.7

2. 容器mysql01挂载

创建了容器mysql01,将主机文件conf挂载在本机/eec/mysql/conf.d中,data挂载在本机/ver/lib/mysql中,其通过账号为root  密码为qwe123进行访问。