ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)

1、下载Ubuntu

Index of /releasesicon-default.png?t=N7T8https://old-releases.ubuntu.com/releases/

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第1张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第2张图片

 2、下载VMware

官方正版VMware下载(16 pro):https://www.aliyundrive.com/s/wF66w8kW9ac
下载Linux系统镜像(阿里云盘不限速):https://www.aliyundrive.com/s/UQMBPEovxNg
(系统镜像下载后,把后缀改成iso即可正常使用)
安装:选一下安装地址,一直下一步即可。(可能会要求重启电脑,重启即可)
在这里插入图片描述

3、安装Linux

下载Linux系统镜像(阿里云盘不限速):阿里云盘分享
(系统镜像下载后,把后缀改成iso即可正常使用)

接下来看图操作

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第3张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第4张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第5张图片

一路next安装即可,iso路径选对即可。

  1. 安装时会创建一个用户 frank 123456
  1. 使用sudo passwd命令修改root用户的密码123456
  2. 使用su - root用户 输入123456密码即可登录到root用户

查看当前虚拟机的ip,ifconfig,提示没有安装网络工具,使用apt install net-tools安装即可

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第6张图片

  1. 查看ip 192.168.79.129

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第7张图片

  1. 使用finalshell连接Ubuntu 提示连接拒绝(如果没有该问题直接跳过该步骤即可)

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第8张图片

解决方案:修改ssh_config文件,需要安装vim命令 apt install vim

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第9张图片

 ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第10张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第11张图片

再次连接Ubuntu 成功

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第12张图片

4、更换ubuntu镜像源

cat /etc/apt/sources.list  使用该命令查看当前的源地址

ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第13张图片

选择对应的版本号,将下面的内容复制到sources.list文件全部覆盖即可。

apt-get update  执行该命令更新即可生效。

5、安装python环境

        PPA 全称为 Personal Package Archives(个人软件包档案),是 Ubuntu Launchpad 网站提供的一项服务,当然不仅限于 Launchpad 。它允许个人用户上传软件源代码,通过 Launchpad 进行编译并发布为二进制软件包,作为 apt/新立得源供其他用户下载和更新。在Launchpad网站上的每一个用户和团队都可以拥有一个或多个PPA。

通常 PPA 源里的软件是官方源里没有的,或者是最新版本的软件。相对于通过 Deb 包安装来说,使用 PPA 的好处是,一旦软件有更新,通过 sudo apt-get upgrade 这样命令就可以直接升级到新版本。

直接使用ppa安装python3.10

add-apt-repository ppa:deadsnakes/ppa

使用以下命令刷新缓存:

apt update

安装python3.10

apt install python3.10

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第14张图片

设置python的版本

apt-cache rdepends python3.8

检查当前版本

python3 --version

使用 update-alternatives 创建指向 python3 的符号链接

update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10

并通过以下命令选择使用哪一个作为 python3

update-alternatives --config python3

 

5.1 安装python3虚拟环境

 为何需要安装python的虚拟环境?

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第15张图片

1、安装pip3

apt install python3-pip

2、安装虚拟环境

apt install virtualenv

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第16张图片

 2.1 、python3 -m venv myenv  在指定路径下创建虚拟环境,这里的myenv根据自己的实际名称修改

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第17张图片

2.2、激活虚拟环境

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第18张图片

 ​​​使用pip 直接安装requests依赖测试安装成功。ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第19张图片

 总结安装虚拟环境的步骤:

1、安装虚拟环境工具,例如venv

2、创建一个新的虚拟环境

3、激活虚拟环境

4、在虚拟环境使用pip安装所需要的安装包

5.2、更换pip的下载源

1、创建pip.conf文件,然后录入对应的镜像源

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第20张图片

 使用命令 pip config list 查看上面的配置是否生效

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第21张图片

5.3、使用Anaconda3工具

        一句话:python需要下载很多包,Anaconda集成了几乎常用的包,这也是那么多数据分析者推荐Anaconda的原因。Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。
用途
        快速安装,运行和升级及其依赖项
        在计算机便捷的创建,和保存,加载和切换环境。

如果你需要的包要求不同版本的Python,你无需切换到不同的环境,因为conda同样是一个环境管理器。仅需要几条命令,你可以创建一个完全独立的环境来运行不同的Python版本,同时继续在你常规的环境中使用你常用的Python版本。——conda官方网站

python和包以及anaconda的概念关系

基于自己对于这些概念术语之间的关系打一个小比方:

关于python与包 包 =“工具”;

下载包 = “买工具”;

写程序 = “用工具做东西”(程序import导入)

关于anaconda

环境 = “好比一栋楼,在楼里面分配一间屋给各种‘包’放,每间房里面的‘包’互不影响”
激活环境 = “告诉电脑,我现在要用这个屋子里面的‘包’来做东西了所以要进这间屋子”
移除环境 = “现在这个屋子里面我原来要用的东西现在不需要了把它赶出去节省电脑空间”
Conda创建环境相当于创建一个虚拟的空间将这些包都装在这个位置,我不需要了可以直接打包放入垃圾箱,同时也可以针对不同程序的运行环境选择不同的conda虚拟环境进行运行。

5.3.1、Anaconda下载和安装

官网下载:https://www.anaconda.com/products/individualicon-default.png?t=N7T8https://www.anaconda.com/products/individual1、推荐使用清华镜像网站下载: 

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
选择你想要下载的Linux版本。
以Anaconda3-2020.07-Linux-x86_64为例子:

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第22张图片

2、将下载的文件放到/root/ 文件夹下,然后进入文件夹执行命令:

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第23张图片

 bash Anaconda3-2020.07-Linux-x86_64.sh

3、一路next,出现yes时输入yes,然后enter确认安装路径即可。 

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第24张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第25张图片

4、添加环境变量:

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第26张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第27张图片

5、查看该文件,在末尾增加

export PATH="/root/anaconda3/bin:$PATH"

/root/anaconda3/bin 就是上面安装的anaconda的路径

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第28张图片6、然后执行 source ~/.bashrc

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第29张图片

7、通过命令conda --version查看当前conda的版本,安装成功!

5.3.2、anaconda使用教程

1、创建新的虚拟环境。

 conda create -n my_env_conda python=3.10

my_env_conda 环境名称 

3.10是python的版本

conda create --name myenvTest

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第30张图片

激活conda:conda activate myenvTest

然后使用命令:conda info --envs 查看所有的conda 

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第31张图片

 使用命令:conda install requests  安装自己需要的依赖ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第32张图片

使用Anaconda Navigator(可选):Anaconda还提供了一个图形化界面工具Anaconda Navigator,用于管理环境、安装软件包和启动应用程序。你可以在终端中运行以下命令启动Anaconda Navigator:

 anaconda-navigator

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第33张图片 ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第34张图片

 ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第35张图片

 创建应用选择刚刚创建的env1虚拟环境中的python

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第36张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第37张图片 ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第38张图片

 点击应用则保存成功。

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第39张图片

点击运行则看到是使用的我们配置的虚拟环境了。

6、安装pycharm

1、下载pycharm的Linux版本

https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=linux&code=PCC

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第40张图片

或者直接在Windows下载然后上传到对应的Linux的文件夹中。

解压文件: tar -xzf pycharm-community-2023.3.2.tar.gz

将文件解压然后移动到指定的文件夹下,/opt/pycharm

2、启动pycharm,找到对应的文件夹下:直接 sh pycharm.sh 打开py编译器

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第41张图片

你好,python!

7、安装docker

1、安装

在 Ubuntu 上安装 Docker 非常直接。我们将会启用 Docker 软件源,导入 GPG key,并且安装软件包。首先,更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTPS 软件源:

apt update

apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第42张图片

将 Docker APT 软件源添加到系统报错了:(这一步好像不用管,不影响后续的安装docker可以忽略) 

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第43张图片

apt-get install python-apt

由于缺少上面的依赖,则需要安装此依赖

按照此操作还是会报错。

cp apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第44张图片

然后再执行:add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 报错就变了~~

2、安装docker

apt update

apt install docker-ce docker-ce-cli containerd.io      安装最新的版本

想要安装指定版本,首先列出 Docker 软件源中所有可用的版本:

apt update

apt list -a docker-ce

5:25.0.0-1~ubuntu.20.04~focal 

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第45张图片

apt install docker-ce= docker-ce-cli= containerd.io  指定版本安装

3、一旦安装完成,Docker 服务将会自动启动。你可以输入下面的命令,验证它:

systemctl status docker

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第46张图片

 docker -v 查看安装的docker的版本

当一个新的 Docker 发布时,你可以使用标准的sudo apt update && sudo apt upgrade流程来升级 Docker 软件包。

如果你想阻止 Docker 自动更新,锁住它的版本:

apt-mark hold docker-ce

4、使用命令验证docker是否安装成功:docker container run hello-world

如果本地没有该镜像,这个命令将会下载测试镜像,在容器中运行它,打印出 “Hello from Docker”,并且退出。

5、卸载docker

在卸载 Docker 之前,你最好 移除所有的容器,镜像,卷和网络。

运行下面的命令停止所有正在运行的容器,并且移除所有的 docker 对象:

docker container stop $(docker container ls -aq)
docker system prune -a --volumes

现在你可以使用apt像卸载其他软件包一样来卸载 Docker:

apt purge docker-ce
apt autoremove

6、设置阿里云加速

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

1、登录阿里云,然后查看加速地址

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第47张图片

2、按照文档操作,执行命令:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

        "registry-mirrors": ["https://86nahrjt666.mirror.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

3、然后查看文件

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第48张图片

4、Docker启动命令

systemctl start docker

5、关闭docker

systemctl stop docker

7、镜像和容器

1、docker常见命令

命令

说明

文档地址

docker pull

拉取镜像

docker pull

docker push

推送镜像到DockerRegistry

docker push

docker images

查看本地镜像

docker images

docker rmi

删除本地镜像

docker rmi

docker run

创建并运行容器(不能重复创建)

docker run

docker stop

停止指定容器

docker stop

docker start

启动指定容器

docker start

docker restart

重新启动容器

docker restart

docker rm

删除指定容器

docs.docker.com

docker ps

查看容器

docker ps

docker logs

查看容器运行日志

docker logs

docker exec

进入容器

docker exec

docker save

保存镜像到本地压缩文件

docker save

docker load

加载本地压缩文件到镜像

docker load

docker inspect

查看容器详细信息

docker inspect

用一副图来表示这些命令的关系:

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第49张图片

        镜像:

        docker image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。

​         可以把docker image 理解成一个模板, 可以通过这个模板实例化出来很多容器。

        ​image 里面是一层层文件系统 Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。 每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker镜像中每一层文件系统都是只读的。 构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。

        容器:

         容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态 。

​         容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资源限制。也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息,这是容器与直接运行在主机上进程的本质区别。

​         容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器。运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本。 这将添加一个容器层,该层允许修改镜像的整个副本 。

2、创建容器

docker run -d --name mysql -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123 msql

Docker run:创建并运行一个容器,-d是容器在后台运行

--name mysql:给容器起个名字,必须唯一

-p 3306:3306:设置端口映射,前面是宿主机端口,后面是容器的端口

-e KEY=VALUE::设置环境变了

mysql:指定运行的镜像名称

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第50张图片

3、拉取nginx镜像和创建nginx容器

docker pull nginx 拉取镜像

docker save -o nginx.tar nginx:latest 保存到本地

docker rmi nginx:latest 删除nginx镜像

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第51张图片

使用 docker load -i nginx.tar 将上面删除的nginx重新加载回来。 

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第52张图片

创建并运行nginx:docker run -d --name nginx -p 80:80 nginx

1、直接访问虚拟机的ip则进入到了nginx的index界面

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第53张图片

2、进入容器终端

docker exec -it nginx bash

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第54张图片

docker rm mysql2(容器名) 

3、如果命令太长可以给命令起别名

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第55张图片

8、docker数据卷

容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。大家思考几个问题:

  • 如果要升级MySQL版本,需要销毁旧容器,那么数据岂不是跟着被销毁了?

  • MySQL、Nginx容器运行后,如果我要修改其中的某些配置该怎么办?

  • 我想要让Nginx代理我的静态资源怎么办?

因此,容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦。 

1、数据卷(volume)是一个虚拟目录,是容器内目录宿主机目录之间映射的桥梁。

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第56张图片

通过数据卷实现宿主机和容器文件的双向绑定。

2、数据卷的常用命令

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第57张图片

3、举例:nginx容器部署静态资源

以Nginx为例,我们知道Nginx中有两个关键的目录:

  • html:放置一些静态资源

  • conf:放置配置文件

如果我们要让Nginx代理我们的静态资源,最好是放到html目录;如果我们要修改Nginx的配置,最好是找到conf下的nginx.conf文件。

但遗憾的是,容器运行的Nginx所有的文件都在容器内部。所以我们必须利用数据卷将两个目录与宿主机目录关联,方便我们操作。如图:

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第58张图片

在上图中:

  • 我们创建了两个数据卷:confhtml

  • Nginx容器内部的conf目录和html目录分别与两个数据卷关联。

  • 而数据卷conf和html分别指向了宿主机的/var/lib/docker/volumes/conf/_data目录和/var/lib/docker/volumes/html/_data目录

这样以来,容器内的confhtml目录就 与宿主机的confhtml目录关联起来,我们称为挂载。此时,我们操作宿主机的/var/lib/docker/volumes/html/_data就是在操作容器内的/usr/share/nginx/html/_data目录。只要我们将静态资源放入宿主机对应目录,就可以被Nginx代理了。

小提示

/var/lib/docker/volumes这个目录就是默认的存放所有容器数据卷的目录,其下再根据数据卷名称创建新目录,格式为/数据卷名/_data

为什么不让容器目录直接指向宿主机目录呢

  • 因为直接指向宿主机目录就与宿主机强耦合了,如果切换了环境,宿主机目录就可能发生改变了。由于容器一旦创建,目录挂载就无法修改,这样容器就无法正常工作了。

  • 但是容器指向数据卷,一个逻辑名称,而数据卷再指向宿主机目录,就不存在强耦合。如果宿主机目录发生改变,只要改变数据卷与宿主机目录之间的映射关系即可。

4、实操截图说明

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第59张图片

1、先删除以前的nginx容器,然后在创建容器,直接指定数据卷挂载

2、查看数据卷 docker volume ls

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第60张图片

 3、查看对应的数据卷详情 docker volume inspect html

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第61张图片

 4、查看 cd /var/lib/docker/volumes/html/_data 目录

使用命令 docker exec -it nginx bash 进入容器内部查看内容 

使用MobaXterm_Personal_23.6工具将静态图片上传到Linux系统里面,直接访问路径成功

http://192.168.79.129/abc.png

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第62张图片由此可见,该目录展示的内容就是容器nginx里面的内容。 

 5、直接修改宿主机里面的文件内容,index.html

修改前:

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第63张图片

修改后:

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第64张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第65张图片ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第66张图片

cd /var/lib/docker/volumes/html/_data
vim index.html  修改文件,esc/:wq 保存退出

6、mysql链接远程(6-7很像,建议直接看7)

拉取的镜像是mysql:8.0.20 

1、创建 docker_insert_mysql8.0.20.sh 。注意里面挂载的前面的路径已实际为准
#!/bin/sh
docker run \
-p 3307:3306 \
--name mysql8 \
--privileged=true \
--restart unless-stopped \
-v /docker/mysql8.0.20/mysql:/etc/mysql \
-v /docker/mysql8.0.20/logs:/logs \
-v /docker/mysql8.0.20/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.20

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第67张图片

2、cd /docker/mysql8.0.20/mysql/ 到该目录,直接 sh docker_insert_mysql8.0.20.sh

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第68张图片

 ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第69张图片

链接成功。 

7、mysql挂载数据卷(6-7很像,建议直接看7)

1、先删除容器mysql8 : docker rm -f mysql8

 2、进入root目录,将mysql文件夹里面内容准备好

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第70张图片ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第71张图片

2.1、conf文件夹:hm.cnf
[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
2.2、 init文件夹:hmall.sq
2.3、data目录是下面步骤生成的
3、创建并运行新mysql容器,挂载本地目录
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v ./mysql/data:/var/lib/mysql \
  -v ./mysql/conf:/etc/mysql/conf.d \
  -v ./mysql/init:/docker-entrypoint-initdb.d \
  mysql
3.1、查看root目录,可以发现~/mysql/data目录已经自动创建好了
3.2、查看MySQL容器内数据 docker exec -it mysql mysql -uroot -p123

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第72张图片

3.3、还是使用外部机器连接该数据库

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第73张图片

 ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第74张图片

 8、总结ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第75张图片

 9、镜像结构

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第76张图片

10、dockerfile

1、定义

        由于制作镜像的过程中,需要逐层处理和打包,比较复杂,所以Docker就提供了自动打包镜像的功能。我们只需要将打包的过程,每一层要做的事情用固定的语法写下来,交给Docker去执行即可。

而这种记录镜像结构的文件就称为Dockerfile,其对应的语法可以参考官方文档:

Dockerfile reference | Docker Docs

2、dockerfile常用命令

指令

说明

示例

FROM

指定基础镜像

FROM centos:6

ENV

设置环境变量,可在后面指令使用

ENV key value

COPY

拷贝本地文件到镜像的指定目录

COPY ./xx.jar /tmp/app.jar

RUN

执行Linux的shell命令,一般是安装过程的命令

RUN yum install gcc

EXPOSE

指定容器运行时监听的端口,是给镜像使用者看的

EXPOSE 8080

ENTRYPOINT

镜像中应用的启动命令,容器运行时调用

ENTRYPOINT java -jar xx.jar

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第77张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第78张图片

3、制作镜像实例

3.1、准备文件到 /root/docker-hello-demo/

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第79张图片

dockerfile:

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

 jar下载地址

3.2、进入该目录,制作镜像 docker build -t docker-demo .

命令说明:

  • docker build : 就是构建一个docker镜像

  • -t docker-demo:1.0-t参数是指定镜像的名称(repositorytag

  • . : 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.代表当前目录,也可以直接指定Dockerfile目录

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第80张图片 3.3、查看镜像 docker images

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第81张图片

3.4、运行镜像 docker run -d --name dd -p 8080:8080 docker-demo

docker logs -f dd 查看容器日志

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第82张图片

http://192.168.79.129:8080/hello/count  访问地址成功!

3.5、删除镜像

docker rmi image_id 这里的image_id可以根据docker images 查看

docker rm image_id 删除单个

docekr rmi image_id1/容器名1  image_id2/容器名2

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第83张图片

docker rmi -f  image_id 强制删除镜像

11、docker网络

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第84张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第85张图片

        如果使用默认的网桥,mysql第一次是172.168.0.2 如果下次后启动该ip可能被其他容器占用,所以需要自定义网桥。

        容器名不变,根据容器名访问,ip变了无关紧要。

1、创建网络

docker networ create heima 创建网络heima

使用命令 docker network ls 查看网络是否创建成功

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第86张图片

2、将容器加入到网络中

docker network connect heima mysql

将容器mysql连接到网络heima

docker inspect mysql  查看网络详情,链接成功

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第87张图片

3、创建容器指定加入到网络中

docker run -d --name dd -p 8080:8080 --network heima docekr-demo 创建容器dd加入网络heima中

docker inspect dd  进入容器dd查看详情

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第88张图片

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第89张图片

docker exec -it dd bash 进入容器内部,ping mysql 可以拼通,因为这两个容器都在heima网络里面。ping nginx不通,不在同一个网络里面。

docker inspect nginx 可以看到nginx在默认的bridge网络里面

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第90张图片

 12、部署java项目

1、准备java项目的jar和dockerfile

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第91张图片

 docekrfile:

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

 hm-service.jar下载链接:

进入对应的文件夹下,创建镜像:docker build -t hmall .  末尾的.代表当前目录

docker run -d --name hmall -p 8080:8080 --network heima hmall

创建hmall容器,指定heima网络,此后就可以访问mysql了,同一个网络

使用docker logs -f hmall 查看容器hmall启动日志

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第92张图片

 http://192.168.79.129:8080/search/list?pageNo=1&pageSize=5

 ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第93张图片ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第94张图片

获取数据成功,说明部署成功!

13、部署前端项目

1、官网查看nginx.conf的挂载命令

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第95张图片

2、准备前端html和conf配置文件

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第96张图片

前端html的压缩包下载地址

nginx.conf


worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/json;

    sendfile        on;
    
    keepalive_timeout  65;

    server {
        listen       18080;
        # 指定前端项目所在的位置
        location / {
            root /usr/share/nginx/html/hmall-portal;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /api {
            rewrite /api/(.*)  /$1 break;
            proxy_pass http://hmall:8080;
        }
    }
    server {
        listen       18081;
        # 指定前端项目所在的位置
        location / {
            root /usr/share/nginx/html/hmall-admin;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /api {
            rewrite /api/(.*)  /$1 break;
            proxy_pass http://hmall:8080;
        }
    }
}

 3、创建容器并加入到对应的网络中

1、由于前面创建过nginx,先删除再创建

docker rm nginx 

docker run -d --name nginx -p 18080:18080 -p 18081:18081 -v /root/nginx/html:/usr/share/nginx/html -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf --network heima nginx

访问链接查看成功!
http://192.168.79.129:18080/

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第97张图片

2、查看日志

docker logs -f hmall

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第98张图片

点击前端的界面搜索,可以看到数据发生了变化,说明前后端联动成功了,数据也是从数据库读取的了。

14、使用dockerCompose部署项目

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第99张图片

 1、对比docker run命令和docker-compose.yml

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第100张图片

2、dockerCompose的命令格式

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第101张图片

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall

3、部署项目

3.1、前面我们是先部署mysql到网络heima,然后部署service到网络heima,最后是前端项目也加入到网络heima

现在可以使用dockercompose 一键部署,需要注意的就是编写dockercompose.yml文件

3.2、项目准备,内容安装图里的结构放置,不然需要修改一些路径,按照前面的步骤操作,这里无需额外的操作了

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第102张图片

3.3、部署操作

安装前删除所有的容器(相同的)

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第103张图片

docker compose up -d  一键部署命令

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)_第104张图片

安装成功,再次访问  http://192.168.79.129:18080/search.html ​​​​​​

你可能感兴趣的:(linux,ubuntu,运维)