首页 > 其他分享 >4. Docker实战

4. Docker实战

时间:2024-07-01 20:09:56浏览次数:17  
标签:实战 容器 run nginx mysql 镜像 Docker docker

Docker安装Mysql

首先确认当前系统中,是否有mysql镜像文件,结果发现没有

截图.png

再使用docker search命令来搜索hub.docker.com上的mysql镜像文件

截图.png

 

我们就使用starts最多的,官方的mysql镜像。使用docker pull mysql命令,来下载mysql:latest,也就是mysql最新版的镜像

截图.png

 

根据mysql镜像创建并运行一个容器:

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql

docker run -d -p 3306:3306 --name xyz \

-v ~/mysql/conf:/etc/mysql/conf.d \

-v ~/mysql/logs:/logs \

-v ~/mysql/data:/var/lib/mysql \

-e MYSQL_ROOT_PASSWORD=123 \

mysql

查看正在运行着的容器,发现刚刚启动的mysql

截图.png

进入运行mysql的容器

截图.png

 

 进入mysql命令行客户端

截图.png

 

 在mysql服务器上创建数据库和表,并加入测试数据

截图.png

 

 再通过windows上的sqlyog来连接linux上的docker中的mysql服务..

截图.png

 

 但是在连接时报错了,因为我们下载的mysql8的加密方法变了!

截图.png

 

为了解决以上问题,我们在docker下的mysql中使用以下命令来修改密码

alter user 'root'@'%' identified with mysql_native_password by '123';  

 

再次使用sqlyog来登录docker容器中的mysql服务,就成功了!

截图.png

  

如果我们想备份docker容器中运行着的mysql的数据,该怎么做呢?首先退出容器:ctrl+p+q,然后再键入以下命令即可备份数据:

docker exec magical_buck sh -c 'exec mysqldump --all-databases -uroot -p"123"' > ./all.sql

 

如果还是连接不上,那可能是宿主机的路由没有开启,需要执行以下命令来开启宿主机的路由:

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

sysctl -p

sysctl net.ipv4.ip_forward

Docker搭建nginx与tomcat的集群环境

拉取nginx镜像

截图.png

 

拉取tomcat镜像

截图.png

 

简单回顾一下nginx的主要作用

1. http服务器

2. 反向代理

3. 动静分离

 

在使用nginx+tomcat集群之前,先看一下整体的结构流程图

截图.png

 

接下来,使用tomcat镜像来跑起来3个tomcat容器

docker run -d -p 8081:8080 --name t8081 tomcat

docker run -d -p 8082:8080 --name t8082 tomcat

docker run -d -p 8083:8080 --name t8083 tomcat

 

截图.png

 创建一个web应用,pom.xml内容如下,

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.gao</groupId>

<artifactId>myweb</artifactId>

<version>1.0-SNAPSHOT</version>

<packaging>war</packaging>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

</properties>

<dependencies>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId>

<version>3.1.0</version>

</dependency>

<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>javax.servlet.jsp-api</artifactId>

<version>2.3.1</version>

</dependency>

</dependencies>

</project> 

index.jsp内容如下

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

<meta charset="utf-8">

<title>index.jsp</title>

</head>

<body>

<h3>Hello, JSP</h3>

本次请求的端口号是:<%=request.getServerPort()%> <br>

会话id: <%=session.getId()%>

</body>

</html> 

 

将该web应用导出为war包:

截图.png

将war包上传到linux:

截图.png

将war包分别部署到3个容中的tomcat中:

docker cp myweb.war t8081:/usr/local/tomcat/webapps

docker cp myweb.war t8082:/usr/local/tomcat/webapps

docker cp myweb.war t8083:/usr/local/tomcat/webapps

 

 然后通过浏览器,分别访问这3个tomcat中的myweb应用

截图.png

截图.png

截图.png

 

接下来,该配置nginx了,在当前用户家目录下创建一个nginx文件夹,在其中创建nginx.conf配置文件,添加以下内容:

# 指定用户和用户所属的组

user root;

 

# 指定nginx开启的进程数。 每个nginx进程平均耗费10M~12M内存,建议设置的数字cpu的数量一致

worker_processes 1;

 

# error_log是一个主模块指令,用来定义全局错误日志文件。

error_log /var/log/nginx/error.log warn;

 

# 用来指定进程pid的存储文件位置

pid /var/run/nginx.pid;

 

# events是一个事件指令,用来设定nginx的工作模式及连接数的上限

events {

        # 用于定义nginx每个进程的最大连接数,默认是1024

        worker_connections 1024;

}

 

# http服务器配置

http {

        # upstream通过server指令指定后端服务器的IP地址和端口

        upstream balance {

                server 192.168.188.130:8081;

                server 192.168.188.130:8082;

                server 192.168.188.130:8083;

        }

        # 主机配置

        server {

                listen 80;

                location / {

                        proxy_pass http://balance;

                }

        }

        # 指定配置文件所包含的媒体类型,如果不包含这个第三方文件的话,

        # 则nginx将无法识别css、js等文件

        include /etc/nginx/mime.types;

 

        # 设定默认为类型为二进制流,也就是当文件类型未定义时使用这种方式

        # 例如在没有配置PHP环境时,nginx是不予解析的,此时浏览器访问PHP

        # 文件就会出现下载的提示

        default_type application/octet-stream;

 

        # 用于开启高校的文件传输模式,也即是传说中的zero copy

        sendfile on;

 

        # 设置客户的连接保持活动连接的超时时间,在超过这个时间之后,服务器就会关闭这个连接

        keepalive_timeout 65;

}

 

然后根据nginx镜像,启动一个nginx容器:

截图.png

docker run -d -p 8082:80 --name pms-front \

-v /root/pms/nginx/nginx.conf:/etc/nginx/nginx.conf nginx

 

查看正在运行中的容器, 如果没有看到nginx容器处于运行状态的话,要使用“docker logs 容器id”来排查错误

截图.png

此时访问nginx服务,会发现,tomcat集群成功了:

截图.png

Docker安装Redis

docker pull redis

docker run -d -p 6379:6379 redis

# 指定配置文件

docker run -d -p 6379:6379 \

-v /root/redis/redis.conf:/redis.conf redis \

redis-server /redis.conf

Docker安装RabbitMQ

拉去RabbitMQ时,要指定RabbitMQ的版本为management,因为该版本会自带web客户端

docker pull rabbitmq:management

docker run -dit --name MyRabbitMQ -e RABBITMQ_DEFAULT_USER=root \

-e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management

截图.png

截图.png

Docker安装ElasticSearch

docker pull elasticsearch:7.11.2

docker run --name es -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \

-e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 \

elasticsearch:7.11.2

截图.png

Docker安装Kibana

docker pull kibana:7.11.2

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.188.130:9200 \

-p 5601:5601 -d kibana:7.11.2

截图.png

Docker安装minio

拉取minio镜像

docker pull minio/minio

启动minio容器

docker run -p 9000:9000 -p 9090:9090 \

--name minio \

-d --restart=always \

-e "MINIO_ACCESS_KEY=minioadmin" \

-e "MINIO_SECRET_KEY=minioadmin" \

-v /mydata/minio/data:/data \

minio/minio server /data --console-address ":9090" -address ":9000"

Docker安装Nacos

docker pull nacos/nacos-server

docker run -d -p 8848:8848 --name nacos8848 -e MODE=standalone nacos/nacos-server

Docker部署SpringBoot项目

1. 准备一个简单的SpringBoot项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.gao</groupId>

<artifactId>docker-test</artifactId>

<version>1.0-SNAPSHOT</version>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.4.2</version>

</parent>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

<configuration>

<mainClass>com.gao.App</mainClass>

</configuration>

</plugin>

</plugins>

</build>

</project>

controller

@RestController

@RequestMapping("user")

public class UserController {

@RequestMapping("save")

public String save() {

return "save ok";

}

}

启动类

@SpringBootApplication

public class App {

public static void main(String[] args) {

SpringApplication.run(App.class, args);

}

}

将该springboot项目打包,得到:docker-test-1.0-SNAPSHOT.jar

将docker-test-1.0-SNAPSHOT.jar传给linux

截图.png

2. 利用DockerFile构建镜像

DockerFile脚本

FROM java:8

COPY docker-test-1.0-SNAPSHOT.jar docker-test.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "docker-test.jar"]

注意,为什么基础镜像是"java:8",而不是"tomcat"?因为springboot应用中引入了spring-boot-stater-web,所以应用中自带tomcat。

构建镜像

docker build -f DockerFile -t docker-test .

查看镜像

截图.png

运行容器

截图.png

访问:

截图.png

最后,我们进入这个容器中,看看里面的文件内容:

docker exec -it 882f87f0a910 bash

截图.png

Docker 本地镜像推送到阿里云

为了测试方便

☐ 删除所有容器:docker rm -f $(docker ps -qa)

☐ 删除所有镜像:docker rmi $(docker images -qa)

 

此时查询容器和镜像,发现都是空的

截图.png

 

 拉取镜像:centos:centos7

截图.png

 

使用该镜像创建并运行一个容器,该容器中是没有vim命令和ifconfig命令的:

截图.png

 

 此时我们为该容器下载这两个命令:

yum -y install vim

yum -y install net-tools

 然后我们将这个容器,提交为一个新的镜像,该镜像便是自带vim和ifconfig命令的镜像了!首先使用ctrl+p+q退出但不关闭容器,然后键入以下命令:

docker commit -a gao -m "mycentos with vim and ifconfig" 容器id mycentos

 

截图.png

新的镜像mycentos是自带vim和ifconfig命令的镜像

 

接下来我们要把mycentos这个镜像推送到阿里云! 进入阿里云开发者平台:https://account.aliyun.com

截图.png

登录,再进入这个网址:https://cr.console.aliyun.com/进入个人版

截图.png

进入镜像仓库: 

截图.png

如果你还没有创建镜像仓库,那就要先创建一个镜像仓库

截图.png

选择本地仓库,然后点击创建镜像仓库:

截图.png

 

 

至此,镜像仓库创建成功:

截图.png

 

接着,就准备把本地镜像推送到阿里云!点击管理,即可看到推送的代码。以下就是将本地镜像推送到远程镜像仓库步骤:

截图.png

 

 先登录

sudo docker login --username=gaochenyi1211 \

registry.cn-hangzhou.aliyuncs.com 

 

然后设置本地镜像与远程镜像仓库的对应关系,也就是标记本地镜像,将其归入某一仓库。

sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/gaopeng/gaocentos:[镜像版本号] 

截图.png

 

推送本地镜像到远程镜像仓库

sudo docker push registry.cn-hangzhou.aliyuncs.com/gaopeng/gaocentos:[镜像版本号] 

截图.png

 

在镜像中心的镜像搜索中,可以搜索到自己刚刚推送的镜像

截图.png

复制镜像地址:

截图.png

 

然后我们再次删除本地的所有容器和镜像:

docker rm -f $(docker ps -qa)

docker rmi -f $(docker images -qa)

镜像全都没有了:

截图.png

 

使用docker pull命令把远程镜像下载下来,记得自己加上版本号!

docker pull registry.cn-hangzhou.aliyuncs.com/gaopeng/gaocentos:1.0

截图.png

 

pull完之后,可以看到一个镜像

截图.png

 

利用这个镜像,创建并运行一个容器,该容器直接具备vim和ifconfig命令!

截图.png

如此,将一个本地镜像推送到阿里云,再从阿里云把镜像pull下来的过程就演示完了。

标签:实战,容器,run,nginx,mysql,镜像,Docker,docker
From: https://www.cnblogs.com/qiutian888/p/18278739

相关文章

  • 3. Docker File
    DockerFileDockerFile是一个脚本程序。DockerFile这个脚本程序就是用来创建Docker镜像的。使用DockerFile的三个固定步骤☐编写DockerFile文件:手动编写一个DockerFile文件,语法必须符合DockerFile的语法规则☐dockerbuild:使用“dockerbuildDockerFile文件名”来创建出一个Do......
  • 2. Docker基础
    Docker深入演示例子为了加深大家对docker技术中的三大概念的理解,我再演示一个例子:拉取tomcat镜像,并部署web应用,并且运行。 dockersearchtomcat在仓库中搜索tomcat镜像,部分截图如下:dockerpulltomcat拉取tomcat镜像这里为什么tomcat镜像的大小有529MB?tomcat 不会这么大啊。......
  • 1. Docker快速起步
    Docker先安装Docker,再讲课没有Docker的日子里在以前的开发时代,开发人员把自己开发好的war交付给运维人员,运维人员为了把war部署到服务器上且保证能运行,就必须由运维人员在服务器上搭建好运行环境! 可这样带来的问题是,如果开发环境与部署环境不一致(比如版本),则会导致无法在服务器环......
  • 一键部署Docker脚本
    bashdocker_install.sh#!/bin/bash#auther:maqinghang#blog:https://www.cnblogs.com/maqinghang#加载操作系统的变量,主要是ID变量。./etc/os-releaseDOCKER_VERSION=20.10.24#指定Docker的版本DOCKER_COMPOSE_VERSION=2.23.0#指定docker-conpose的版本FILE......
  • 实战篇——SQL注入sqli-labs-master靶场实战一
    实战篇——SQL注入sqli-labs-master靶场实战(1)SQL注入的原理没有对用户的输入进行合法性判断或过滤,而是直接将其拼接至SQL查询语句当中作为命令执行,从而导致非法操作。SQL注入的检测也就是闭合方式的判断,根据报错信息的不同情况可以分为3类——(1)有报错信息(2)无报错信息,但......
  • Linux容器篇-Docker镜像的使用
    文章目录前言一、列出镜像列表二、获取一个新镜像三、查找镜像四、拉取镜像五、删除镜像六、创建镜像1、更新镜像2、构建镜像七、设置镜像标签总结前言当运行容器时,使用的镜像如果在本地中不存在,docker就会自动从docker镜像仓库中下载,默认是从DockerHub公共......
  • 玄机——第四章 windows实战-wordpress wp
    文章目录一、前言二、概览简介三、参考文章四、步骤(解析)准备阶段1.01.1请提交攻击者攻击成功的第一时间,格式:flag{YY:MM:DDhh:mm:ss}1.2请提交攻击者的浏览器版本flag{Firgfox/2200}1.3请提交攻击者目录扫描所使用的工具名称1.4找到攻击者写入的恶意后门文件,提交文......
  • 【Docker】Docker安全与最佳实践:保护你的容器化应用程序
    Docker安全与最佳实践:保护你的容器化应用程序一、保持Docker更新*1\.使用容器编排工具2.蓝绿部署3.滚动更新4.就地更新5.监控和回滚二、最小权限原则三、网络隔离四、其他安全措施前言Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到......
  • docker
    dockerDocker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。加了Linux基金会,遵从了Apache2.0协议,项目代码在上进行维护。容器化技术,区分于虚拟机,又类虚拟机,兼具虚拟机隔离的优点,又有速度快的优点容器......
  • Docker 镜像安装
    ​​​前言Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。在安装Docker时,我们经常需要用到镜像安装,为此我整理了一下如何通过镜像源来安装Docker的......