linux_docker入门

1.Docker的介绍和安装

1.基本介绍

开源项目,dotCloud公司 业余项目

基于google的go语言

后加入linux基金会 遵从apache2.0协议

2)职责的逻辑分类

3)快速高效的开发生命周期

4)鼓励使用面向服务的架构SOA

概念片段:

在这里插入图片描述

容器与虚拟机的比较

linux_docker入门_第1张图片


Docker服务器与客户端

Docker:c/s架构

向服务器/守护进程发出请求,它们会进行返回结果,

命令行

远程,其他,连接

linux_docker入门_第2张图片

镜像和容器

镜像通过指令创建:

添加一个文件

执行一个命令

打开一个窗口

容器是:

一个镜像格式

一个标准操作

一个执行环境

注册方法

这里集成了各种开发镜像

dockerhub

2.安装方法

通过yum进行安装

docker的官方文档

  1. 更新yum包
sudo yum update

​ 一路y

在这里插入图片描述

2.更新指令

yum install -y yum-utils device-mapper-persistent-data lvm2

linux_docker入门_第3张图片

  1. 设置稳定的存储库
yum-config-manager \
    --add-repo \
 https://download.docker.com/linux/centos/docker-ce.repo

在这里插入图片描述

4.可选:启用夜间存储库或测试存储库。

sudo yum-config-manager --enable docker-ce-nightly
sudo yum-config-manager --enble docker-ce-test

5.安装docker引擎

sudo yum install docker-ce docker-ce-cli containerd.io

6.启动docker

sudo systemctl start docker

在这里插入图片描述

7.通过运行hello-world映像,验证Docker Engine - Community是否正确安装

sudo docker run hello-world

这个命令下载一个测试映像并在容器中运行它。当容器运行时,它打印一条信息消息并退出。

查看的话会发现多了一个helloworld的镜像

docker images

在这里插入图片描述

配置阿里云镜像加速器

登录到你的阿里云当中,搜索镜像加速器

拷贝加速器的链接

然后在你的一下目录当中写入

/etc/docker/daemon.json

{
 "registry-mirrors": ["地址"]
}

esc回车

shift+z+z保存

加载配置

systemctl daemon-reload

重启docker

systemctl restart docker

2.mysql的安装和部署

mysql的部署

0.查找mysql的镜像

docker serach mysql

linux_docker入门_第4张图片

1. 拉取Mysql的镜像

docker pull mysql

(可选择的)直接拉取mysql8

docker pull mysql:8

输入命令后请耐心等待不要进行其他的操作

在这里插入图片描述

2.创建容器

用户名默认是root

密码可以自行修改,这里写的是123456

-p代码端口映射,格式为:宿主机端口,容器运行端口

-e代码添加环境变量 MYSQL_ROOT_PASSWORD是root账号的密码
–restart 设置docker重启后的策略 (always:跟随docker重启而重启)

docker run --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root --restart always -d mysql --lower_case_table_names=1

参数说明:
-p 端口映射 :左边为映射外部端口(实际访问端口) 右边为该程序实际端口

–name 指定名称: 此名称为可以操作镜像的名称 区别于-d后面的名称为显示的名称

–restart :指定docker容器重启/启动时容器的加载状态:always为永远跟随docker容器启动而启动

-d:后台运行 即挂载到后台运行
–lower_case_table_names=1 :设置大小写不敏感
注意:如果命令运行不正确

  1. 检查是否少空格
  2. 调换指令位置 eg:-p/-e 进行调换

3.进入mysql容器

mysql是我们自定义的名字
docker exec -it mysql bash

在这里插入图片描述

4.登录mysql

输入刚才设置的密码

mysql -uroot -p

linux_docker入门_第5张图片

5.远程登录 mysql

连接宿主机的ip,指定端口为宿主机映射端口3306.

开放权限

(如果因为版本问题或者各种原因不能执行下列的语句则参考附加1来进行操作)
在mysql中进行操作

grant all privileges on *.* to 'root'@'%';

在这里插入图片描述
调整远程连接加密模式
调整远程连接的好处是可以兼容数据库版本,因为数据库低版本不能读取高版本的加密方式,所以需要此命令来进行调整加密方法进行数据库的连接.当你进行远程连接的时候就需要输入此密码才能进行远程连接.

alter user 'root'@'%' identified with mysql_native_password by '你想设置的远程连接的密码';

在这里插入图片描述

刷新

flush privileges;

在这里插入图片描述

关闭防火墙

systemctl stop firewalld

在这里插入图片描述

查看防火墙状态是否关闭

systemctl status firewalld

linux_docker入门_第6张图片

6.进行远程连接测试

因为镜像是高版本镜像,所以需要用到高版本的客户端进行连接测试,如果出现报错,则推荐重启虚拟机来解决问题.还有可能是端口占用的问题,可以通过更改端口映射来解决问题,常见的问题还有,密码加密方法不匹配,因为mysql5.x的密码加密方式和8.x的加密方式不同,所以需要进行调整.
因为我们配置的外部端口号是3308,所以需要通过此端口进行连接,还有就是此密码是配置密码加密方式时所配置的密码,和你的数据库本地密码无关,就是说你配置的远程连接的密码的更改不作用于linux虚拟机命令行登录的密码.
配置如下:
linux_docker入门_第7张图片
linux_docker入门_第8张图片

linux_docker入门_第9张图片

附加1

处理问题的附加内容 没有错误请跳过

  1. 删除容器
docker rm 容器名称或id
docker rm docker 0627ec6901db
查询名称或id的方法
docker ps -a
docker ps
  1. 删除镜像
    关掉后台的mysql
    当我进行删除mysql的镜像的时候发生了一个错误,它提示我有一个进程正在使用mysql,需要我去关掉哪个进程
    就是以下的错误:
    在这里插入图片描述
    首先我执行了以下命令用来查询所有的进程
docker ps -a

在这里插入图片描述

根据提示信息来进行镜像的删除,先删除占用,再删除mysql镜像
docker rmi 占用程序的id号
docker rmi mysql的id号

linux_docker入门_第10张图片
重装完数据库之后,再回到0的步骤重新进行数据库的配置
**重要:配置完成后一定要进行重启
要对照映射的端口号:
-p 3308:3306 则远程连接访问的端口号就是3308
对照好密码:
比如在linux中登录的密码是1234
而在远程连接配置的密码是root
在图形化界面中登录的密码就是root

这里面配置的密码就是远程连接的密码,和本地连接无关**

alter user 'root'@'%' identified with mysql_native_password by '你想设置的远程连接的密码';

附加2 数据库密码的修改

1.记得旧密码的修改方法
退出数据库到此界面
在这里插入图片描述
输入以下指令

mysqladmin -uroot -p旧密码 password 新密码;
mysqladmin -uroot -p1234 password root;

2.忘记密码的重置方式

  1. 在伪命令行中安装vim 执行以下命令
apt-get update
apt-get install vim

linux_docker入门_第11张图片
linux_docker入门_第12张图片
2. 修改权限
退出数据库并执行以下命令

vi etc/mysql/my.cnf

在这里插入图片描述

加入此行(skip-grant-tables):跳过权限认证,没有此文件的,需要加上所有

[mysqld]
skip-host-cache
skip-name-resolve
skip-grant-tables

linux_docker入门_第13张图片

3.回到根目录,重启mysql容器
这个mysql是你自定义的名字,也可以是id号

查询正在运行的容器
docker ps 

在这里插入图片描述

docker restart mysql

在这里插入图片描述
4.进入mysql容器,不用输入密码直接就可以进入(直接回车就行)
在这里插入图片描述
linux_docker入门_第14张图片
5.进入数据库并把mysql库中的user表的root用户的密码设置为空

use mysql
update user set authenticatication_string='' where user='root';

linux_docker入门_第15张图片
6.放开验证权限
(1)退出数据库再进入my.cnf进行权限的放开

exit
vim etc/mysql/my.cnf

linux_docker入门_第16张图片

linux_docker入门_第17张图片

(2)退出伪命令行进入到linux虚拟机的命令行当中并执行重启容器的指令
在这里插入图片描述
在这里插入图片描述

7.重新设置密码
(1)进入数据库,不用输入密码直接进入
linux_docker入门_第18张图片

(2)设置新密码

说明:alter user '用户名'@'本地连接' identified by '新密码';
示例:alter user 'root'@'localhost' identified by 'root';
刷新权限
flush privileges;

linux_docker入门_第19张图片
(3)退出并重新登录

在这里插入图片描述
linux_docker入门_第20张图片
但这时我们遇见一个问题,就是无法进行远程连接,那么就执行下面的语句

alter user 'root'@'%' identified with mysql_native_password by '你想设置的远程连接的密码';

在这里插入图片描述
再进行远程连接就会指向成功了

linux_docker入门_第21张图片


附加3 数据库忘记密码的优化版本

  1. 以一个新的容器为例,从而可以让大家看到一个完整的流程(看教程的可以直接跳过到第三步)
    在这里插入图片描述
    可以看到这里有一个容器我们现在删除它
查看运行中的容器
docker ps
停止容器
docker stop 容器id/容器名
容器id的演示(根据docker ps查询到的id号)
docker stop f4afe3c3409e
容器名的演示(根据ps指令对应NAMES字段的值)
docker stop mysql
删除容器
docker rm 容器名
docker rm f4afe3c3409e
docker rm mysql

在这里插入图片描述
2.重新运行一个容器

docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD='root' -d mysql
-di守护进程
--name新建的容器别名
-p端口映射
-e设置环境变量,这里是设置的初始化数据库的密码
-d镜像源

在这里插入图片描述

3.进入此容器中,装载vim编辑

进入容器的命令:
docker exec -it mysql bash
装载vim的方法
apt-get update
apt-get install vim

执行进入进入容器的命令之后发现路径发生了变化 root@localhost ~ —> root@31d2651a7839:/
在这里插入图片描述
先执行更新方法 apt-get update
linux_docker入门_第22张图片

再执行装载方法apt-get install vim
他会问你是否确定 ,输入y即可
linux_docker入门_第23张图片
4.进入指定目录修改权限限制
这时候vim指令已经可以用了

输入以下命令以进入指定的目录
vim etc/mysql/my.cnf
在[mysqld] 下方输入以下语句(这样做是为了跳过权限限制)
严重错误:请注意,一定不要输错,如果输错并刷新之后,容器将不能启动
skip-grant-tables
这时候还不能登录进入数据库,需要进行刷新才能成功免密登录
再次进入数据库发现已经可以成功免密访问了

修改my.cnf文件
linux_docker入门_第24张图片
请注意输入语句的路径位置,需要我们退出容器目录在根目录上执行此语句
在这里插入图片描述
完整的截图:
linux_docker入门_第25张图片
5.进入mysql库中,修改user表中的密码(优化)

(1)指定mysql数据库

use mysql

linux_docker入门_第26张图片
(2)修改root用户密码为空

update user set authentication_string='' where user='root';

在这里插入图片描述
(3)刷新权限

flush privileges;

在这里插入图片描述
(4)添加localhost(本命令行登录)密码

alter user 'root'@'localhost' identified by 'aaaa';

在这里插入图片描述
(5)添加远程连接密码(这里我们为了便于记忆设成和localhost一样的密码

alter user 'root'@'%' identified with MYSQL_NATIVE_PASSWORD by 'aaaa';

在这里插入图片描述
(6)再次刷新权限

flush privileges;

在这里插入图片描述
6.授权数据库并重启
(1)删除skip-grant-tables语句
先退出数据库至数据库的根目录,然后再次进入my.cnf文件当中,删除skip-grant-tables语句保存退出.

vim etc/mysql/my.cnf

linux_docker入门_第27张图片
(2)退回到根目录进行容器的重启

docker restart 容器id/容器名
docker restart mysql
docker restart 31d2651a7839

在这里插入图片描述

(3)测试连接
连接容器数据库:
linux_docker入门_第28张图片

数据库远程连接
linux_docker入门_第29张图片

3.Tomcat的安装和部署

1.查询镜像并安装

docker search tomcat

(1)查看官网镜像

linux_docker入门_第30张图片

(2)安装镜像

docker pull tomcat

linux_docker入门_第31张图片

(3)通过-v进行映射关系的书写

linux_docker入门_第32张图片

(4)检查tomcat是否加入镜像列表

linux_docker入门_第33张图片

2.运行容器:

1.利用交互式方法运行tomcat

输入指令(不加-d的话退出的话就会直接退出容器,因为没有加入到后台进程)

docker run -it --name=容器名称 镜像名称:标签 /bin/bash

docker run -it --name=tomcat tomcat /bin/bash

然后进入到webapps中把目录复制保存,一会需要配置映射关系

在这里插入图片描述

大概就是下面这个目录

usr/local/tomcat/webapps

2.把tomcat挂载到后台

需要创建一个webapps目录

回到root

进入home目录

创建webapps目录

exit
cd /home
mkdir webapps

在这里插入图片描述

进入到webapps中并记录下路径

在这里插入图片描述

/home/webapps

写入一下命令进行挂载

docker run -id --name=tomcat -v /home/webapps:/usr/local/tomcat/webapps -p 8081:8080 tomcat

在这里插入图片描述

如果以前配置过出现端口占用的情况,

请删除以前的镜像

查看镜像
docker images
删除镜像
docker rmi IMAGE ID
docker rmi 47c156f4d4e3

linux_docker入门_第34张图片

3. 查看运行状态:

在这里插入图片描述

开放端口:

firewall-cmd --zone=public --add-port=8081/tcp --permanent

在这里插入图片描述

重新加载一下:

firewall-cmd --reload

在这里插入图片描述

firewall-cmd --list-ports

在这里插入图片描述

出现8081/tcp则说明开放成功

4.创建一个页面用于访问

cd /home/webapps/
mkdir ROOT
cd ROOT/
touch index.html

linux_docker入门_第35张图片

接着编辑这个index页面

vim index.html

随便写一个页面用于测试:

linux_docker入门_第36张图片

在地址栏输入ip地址和端口号进行访问

linux_docker入门_第37张图片

5.中文页面乱码的解决方案

如果测试出现乱码请修改字符集

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <title>从docker容器中启动tomcattitle>  
    head>
    <body>
        看到这个页面说明docker的tomcat容器启动成功了
    body>
    
html>

linux_docker入门_第38张图片

登录守护式容器的方式:

如果你在root下要怎么进入到tomcat中呢?

docker exec -it 容器名称(或者容器id) /bin/bash
docker exec -it tomcat /bin/bash

在这里插入图片描述

如果不知道名称的话可以进行查询

在root下进行查询

docker ps -a
docker ps

在这里插入图片描述

curl指令可以在linux中访问页面(文字页面)

curl localhost:8081

linux_docker入门_第39张图片

6.拷贝目录/文件的实施方法

测试tomcat多个端口运行
再启动一个tomcat

docker run -id --name=tomcat2 -v /home/webapps2:/usr/local/tomcat/webapps -p 8082:8080 tomcat

在这里插入图片描述

复制文件到指定的目录当中

docker cp 宿主机文件或目录 容器名称:容器目录
docker cp 容器名称:容器目录 需要copy到宿主机的文件或目录
docker cp index.html 36fd800b7b76:/usr/local/tomcat/webapps

查看是否copy成功

在这里插入图片描述

把容器中的文件copy到宿主机中

首先退出容器,然后执行下列的命令

docker cp /usr/local/tomcat/webapps /usr/

在这里插入图片描述

7.查看容器ip地址

docker inspect 容器名称或id
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(或者容器ID)

例子:

docker inspect 36fd800b7b76
docker inspect --format='{{.NetworkSettings.IPAddress}}' 36fd800b7b76

linux_docker入门_第40张图片

在这里插入图片描述

删除容器

docker rm 容器名称(或容器id)

删除容器的时候他说我不能删除正在运行的容器,那我停止了不就完了吗.

在这里插入图片描述

停止容器
docker stop 50eb8e2af48a
再次执行删除命令
docker rm 50eb8e2af48a

linux_docker入门_第41张图片

查看是否删除成功

docker ps

发现已经没有该容器

在这里插入图片描述

4.基本练习的补充

Docker命令

1.帮助命令

docker --help
docker run --help
docker start/restart/stop mysql
docker ps -a
当遇到困惑的时候都可以通过帮助命令来寻找最适配的命令方法
docker 需要进行查询的指令 --help
eg:
docker run --help
这个查询的就是docker run的使用方法可以跟什么参数,有什么含义等

2.查看命令

查看端口的命令
firewall-cmd --list-port
查看防火墙命令
systemctl status firewalld

3.运行容器命令

运行tomcat容器
docker run -di --name=tomcat -v /home/webapps:/usr/local/tomcat/webapps -p 8081:8080 tomcat

实例:

同时开启多个tomcat

运行tomcat容器
docker run -di --name=tomcat -v /home/webapps:/usr/local/tomcat/webapps -p 8081:8080 tomcat

当我们关闭防火墙的时候,我们不能再创建容器.(这实际上就是为了保证我们的安全性操作)

在这里插入图片描述

当我们重启的时候这些容器还在吗?

在这里插入图片描述

答案是否定的,但我们可以通过一下指令来查看启动过的容器:

docker ps -a

linux_docker入门_第42张图片

比如我想运行其中的某几个容器,根据id号

docker start cc301d8a464d e85df9988364 e91de51cc4ec af0608aa3025 36fd800b7b76

linux_docker入门_第43张图片

这几个容器就成功运行了

在这里插入图片描述

3.查看容器的ip地址

docker inspect 容器的id
docker inspect 36fd800b7b76

linux_docker入门_第44张图片

通过执行下列命令可直接输出IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' 36fd800b7b76

在这里插入图片描述

4.管道命令

在查询信息的后面加上|grep xx
意思是打印全部信息把xx有关的信息显示在末尾
示例:
docker inspect 36fd800b7b76|grep IP

linux_docker入门_第45张图片

linux_docker入门_第46张图片

5.重定向json数据到指定的目录

docker inspect 36fd800b7b76 > /home/tomcat.json
其中 36fd800b7b76是容器id
/home是目录
/tomcat.json 是新创建的文件

在这里插入图片描述

打开ftp工具,可以发现tomcat.json已经被重定向到指定的目录 (/home目录下)

linux_docker入门_第47张图片


mysql容器启动的错误演示

启动mysql容器

这只是一个演示:当我们已经有了mysql的容器之后就不能通过这种方法进行创建了

请以此命令为准
docker run -di --name=mysql2 -p 3306:3306 -e Mysql_ROOT_PASSWORD=root -d mysql

补充:-e的含义是设置环境变量

-e 后面跟的Mysql_ROOT_PASSWORD是此版本镜像的内置的参数,如果遇到的镜像没有此字段,则设置也不生效.

在这里插入图片描述

因为我之前已经创建了一个mysql的容器,所以这次启动导致了错误

linux_docker入门_第48张图片

然后删除其中一个,再通过以下指令开启容器

docker start 容器名/id
docker start mysql

linux_docker入门_第49张图片

发现容器已经开启

通过远程连接测试数据库是否能够正常运行:

linux_docker入门_第50张图片

进入mysql容器根目录的两种方法

docker exec -it mysql /bin/bash
docker exec -it mysql bash

在这里插入图片描述

在这里插入图片描述

比较linux和mysql目录的异同:

在这里插入图片描述

因为是基于linux的mysql做到和linux目录结构相同,这样就便于和linux虚拟机交互信息(因为此mysql版本是根据docker下载而来的,根据基础的linux镜像从而制作的mysql镜像,这样能够实现快速,高效和便捷)

查找目录结构:(相当于windows的搜索引擎)

命令:

find / -name mysql
find / -name 查找的包含此字段的路径

在这里插入图片描述

把容器保存成镜像

docker commit 容器id 自定义名称:标签(自定义信息)
docker commit 36fd800b7b76 mytomcat:5.11

在这里插入图片描述

查看进行发现多了一个刚创建的镜像

docker images

linux_docker入门_第51张图片

对照这个表就能够体会到创建的名称:标签的含义,分别对照REPOSITORY 镜像名

TAG 标签,从中我们发现,我们拷贝的是容器id但是生成的是镜像id,这是系统给我们生成的一个id号

输入指令进行保存镜像(一定要严格按照我们创建的信息去书写)

docker save -o mytomcat.tar mytomcat:5.11

在这里插入图片描述

输入命令查看大小

ll -h

在这里插入图片描述

镜像的恢复与迁移

刚才我们已经把镜像保存到了tar包里面,现在我们检验这个tar包是否能够成功加载成镜像,所以我们需要先去删除这个镜像

docker rmi mytomcat:5.11

在这里插入图片描述

然后通过加载tar包实现恢复镜像,同理如果把tar包转移到另外的宿主机上同样也能够恢复镜像

主要:
docker load -i mytomcat.tar

这样这个tar包就加载成功了

在这里插入图片描述

在这里插入图片描述

5.Dockerfile

Dockerfile命令

概念,看看就行了

命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name 声明镜像的创建者或维护者信息 MAINTAINER user_name 可以把环境变量设置到容器内部
ENV key value 设置环境变量(可以写多条) 格式为:ENV key value 例如:ENVJAVA_HOME/path/to/java
RUN command 是Dockerfile的核心部分(可以写多条) 格式:RUN 在shell终端运行,使用这种格式,就像直接在命令行中输入命令一样
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file 和ADD相似,但是如果是压缩文件并不能解压
WORKDIR path_dir 设置工作目录,也可说是切换目录指令,类似cd命令,卸载该指令后的RUN,CMD以及ENTRYPOINT指令都将该目录作为当前目录,并执行相应命令
ARG 设置构建参数 ARG指令用于设置构建参数,类似EVN和EVN不同的是,ARG设置的是构建的环境变量,在容器运行时是不会存在这些变量的
CMD容器启动命令 用于为执行容器提供默认值,每个DOCKerfile只有一个CMD命令,如果指定多个CMD命令,name只有最后一条会被执行,如果启动容器时制定了运行的命令,则会覆盖CMD指定的命令.支持3种格式: CMD[“executable”,“param1”,“param2”] CMD[“param1”,“param2”] (为ENTYRPOINT指令提供预设参数) 实例:CMD echo “this is a test.”|wc -
ENTRYPOINT入口点 ENTRYPOIN和CMD命令的目的一样,都是指向docker容器启动时执行的命令,可以多次设置,但是只有最后一个有效
EXPOSE声明暴露的端口 EXPOSE指令用于声明在运行时容器提供服务的端口,格式为:EXPOSE […] 可以声明暴露多个端口 需要注意的是,这只是一个声明,运行时并不会因为该声明就打开相应的端口.该指令的作用主要是帮助镜像使用者理解该项服务的守护端口;其次是当运行时使用随机映射时,会自动映射EXPOSE的端口

docker file的简单运用


实例的演示

(springboot的部署和发布通过Dockerfile脚本进行自动装配)

1.创建一个spring boot项目

linux_docker入门_第52张图片

linux_docker入门_第53张图片

可以根据自己的需要来添加模块

linux_docker入门_第54张图片

linux_docker入门_第55张图片

创建一个java类

path:controller.HelloController

linux_docker入门_第56张图片

package com.xcong.java.first.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("hello")
    public String hello(){
        return "hello";
    }
}
   

linux_docker入门_第57张图片

linux_docker入门_第58张图片

linux_docker入门_第59张图片

运行成功的控制台截图.并且可以成功的访问网页

linux_docker入门_第60张图片

linux_docker入门_第61张图片

2.在maven插件中点击install进行项目的打包

linux_docker入门_第62张图片

展开左侧菜单的target可以看到jar包已经生成成功了!

linux_docker入门_第63张图片

因为此jar包的名字比较long,所以我们决定重新让它打包,更改为比较简短的名字

<finalName>firstfinalName>

linux_docker入门_第64张图片

再次在maven插件中双击install,

找到此jar包复制到桌面新建文件夹中

linux_docker入门_第65张图片

linux_docker入门_第66张图片

3.在Dos命令行中进行项目的发布

在地址栏中输入cmd,开启当前路径的cmd命令行

linux_docker入门_第67张图片

由于端口冲突需要先把idea中的项目停掉

在这里插入图片描述

在命令行中输入java -jar jar包全名 来运行它

在这里插入图片描述

linux_docker入门_第68张图片

然后在浏览器中访问它

linux_docker入门_第69张图片

当命令行关掉的时候,我们还能成功访问吗?

linux_docker入门_第70张图片

答案是不能!

4.补充

(此浏览器显示的信息是return的信息,return “” 和映射无关)

linux_docker入门_第71张图片

linux_docker入门_第72张图片

linux中利用Dockerfile脚本进行项目的发布

1.添加保存位置

在linux虚拟机中执行以下命令,创建一个文件夹,在文件夹中创建一个文件,并进行修改,另外把刚生成的first.jar包也导入到此文件夹中

mkdir firstDocker
cd firstDocker
touch Dockerfile
vim Dockerfile

在这里插入图片描述

在这里插入图片描述

这个文件夹中有两个文件

linux_docker入门_第73张图片

2.开启新连接

多开一个连接,和当前连接相同的连接,我们要在新连接中查找镜像

linux_docker入门_第74张图片

linux_docker入门_第75张图片

现在我有两个连接,一个是打开的编译文件的连接,一个是命令行界面,这两个连接是同一个虚拟机的连接

在这里插入图片描述

3.写入脚本

然后在刚才打开的Dockerfile文件中写入信息

此端口号如果没有在springboot的配置文件进行配置,就按照8080端口
如果你进行配置就更改为你配置的端口号

from java:8
workdir /home
add first.jar /home
expose 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/home/first.jar"]


在这里插入图片描述

wq保存退出

4.构建镜像

然后执行命令用于保存镜像:

这个创建任务是默认根据我们写好的脚本进行拉取和配置的,我们只需要拉取

docker build -t="first:1.0" .

请耐心等待构建完成.

linux_docker入门_第76张图片

删除此镜像,再次构建就发现比原先的速度要快的多

linux_docker入门_第77张图片

linux_docker入门_第78张图片

5.创建容器

没删除用1.0
docker run -di --name=first -p 8080:8080 first:1.0
删除用2.0
docker run -di --name=first -p 8080:8080 first:2.0
此端口号如果没有在springboot的配置文件进行配置,就按照8080端口
如果你进行配置就更改为你配置的端口号

查看容器发现容器没有运行

docker ps -a

linux_docker入门_第79张图片

那我们就手动运行它

docker start 767997dd59df

查看log日志,发现已经运行成功

docker logs 767997dd59df

linux_docker入门_第80张图片

6.测试访问

在浏览器中访问

linux_docker入门_第81张图片

6.构建Docker私有仓库

1.拉取私有仓库镜像

docker pull registry

2.启动私有仓库容器

docker run -di --name=registry -p 5000:5000 registry

3.打开浏览器输入地址 :

http://宿主机  ip:5000/v2/_catalog 
http://192.168.30.1:5000/v2/_catalog

看到{“repositories”:[]} 表示私有仓库搭建成功并且内容为空

linux_docker入门_第82张图片

4.修改 daemon.json

vi /etc/docker/deamon.json

添加以下内容

{"insecure-registries":["宿主机ip:5000"]}
{"insecure-registries":["192.168.30.1:5000"]}

linux_docker入门_第83张图片

上面少了个逗号(以下是正确的写法,因为配置阿里云仓库的加速器所以中间要有个逗号)

配置的时候请以自己的实际地址为准

{
	"registry-mirrors": ["https://ncfqcczm.mirror.aliyuncs.com"],
	"insecure-registries":["10.50.6.36:5000"]
}

5.重启docker服务

systemctl restart docker

6.私有仓库的提交和推送

1.标记镜像为私有仓库的镜像

docker tag jdk1.8 宿主机ip:5000/jdk1.8 
docker tag first:1.0 192.168.43.31:5000/first:1.0

2.提交到私有仓库

docker push 192.168.43.31:5000/first:1.0

3.拉取私有仓库的镜像

docker pull 192.168.43.31:5000/first:1.0
这个和你提交的路径是一样的

3.查看私有镜像仓库内容

curl http://宿主机ip地址:5000/v2/_catalog
curl http://192.168.43.31:5000/v2/_catalog 

你可能感兴趣的:(linux,linux,docker)