docker部署环境及项目发包

玛卡,巴卡,阿卡,哇卡,米卡,玛卡,呣!
玛卡,巴卡,阿巴,雅卡,伊卡,阿卡,噢!
哈姆,达姆,阿卡嗙,咿呀呦~ 玛卡,巴卡,阿卡,哇卡,米卡,玛卡,呣!

一、安装docker

阿里云镜像加速,这步可以不做

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://pi9dpp60.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

1、卸载旧版本

# 较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、安装 Docker Engine-Community

使用 Docker 仓库进行安装

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。

设置仓库

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

\$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

使用官方源地址(比较慢) $ sudo yum-config-manager

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

可以选择国内的一些源地址:

阿里云
$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

清华大学源
$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

安装 Docker Engine-Community

安装最新版本的 Docker Engine-Community 和 containerd

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

Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。

或者安装特定版本:

要安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:

1、列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable

2、通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1。

$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

启动 Docker。

$ sudo systemctl start docker

通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。

$ sudo docker run hello-world

二、建立网络

定义nginx网络

# 查看默认的网络bridge的详细信息
docker network inspect bridge
# 定义application网络
docker network create --driver bridge --subnet 192.168.2.0/16 --gateway 192.168.2.1 applicationNet

三、nginx部署

1、拉取Nginx进行

docker pull nginx

2、先在主机创建工作文件夹,为了挂载配置和静态文件的访问使用

mkdir -p /moko/docker/nginx/conf    # 配置文件路径
mkdir -p /moko/docker/nginx/logs    # 日志路径
mkdir -p /moko/docker/nginx/html    # html 放静态文件

上面指令可自行合并为一个指令

3、启动容器查看配置文件路径,便复制配置文件到主机中

#启动一个容器,查看配置文件路径
[root@localhost nginx]# docker run -itd --name nginx nginx /bin/bash
root@e4ffa44bcc30:/# cd /etc/nginx/
root@e4ffa44bcc30:/etc/nginx# ls
conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params
root@e4ffa44bcc30:/# cd /usr/share/nginx
root@e4ffa44bcc30:/usr/share/nginx# ls
html
root@e4ffa44bcc30:/usr/share/nginx#

#退出容器
root@e4ffa44bcc30:/usr/share/nginx# exit
exit

# 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录($PWD 当前全路径)
docker cp nginx:/etc/nginx/nginx.conf /moko/docker/nginx/conf
docker cp nginx:/etc/nginx/conf.d /moko/docker/nginx/conf


# 查看 容器 获取容器ID 或直接使用名字
 docker container ls
# 停止容器
 docker container stop nginx
# 删除容器
 docker container rm nginx

# 在当前目录下创建目录:html 放静态文件
 mkdir html
 

4、部署容器

docker run -d -p 80:80  \
              -p 443:443  \
 --name nginxweb \
 -v /moko/docker/nginx/html:/usr/share/nginx/html \
 -v /moko/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
 -v /moko/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
 -v /moko/docker/nginx/logs:/var/log/nginx \
 nginx 

-d # 表示在一直在后台运行容器 -p 80:80 # 对端口进行映射,将本地8081端口映射到容器内部的80端口 --name # 设置创建的容器名称 -v # 将本地目录(文件)挂载到容器指定目录; --link answer-server:answerserver 这计划是指需要转向本机docker容器的别名

这里最好写成一个启动脚本

vim nginxStartShell.sh

docker run -d -p 80:80  \
              -p 443:443  \
 --name nginxweb \
 -v /moko/docker/nginx/html:/usr/share/nginx/html \
 -v /moko/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
 -v /moko/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
 -v /moko/docker/nginx/logs:/var/log/nginx \
 nginx

赋权 chmod 777 *.sh

四、mysql部署

1、docker仓库拉取mysql8.0

[root@localhost /]# docker pull mysql:8.0
[root@localhost /]# docker images mysql:8.0

2、先在主机创建工作文件夹,为了挂载配置和静态文件的访问使用

mkdir -p /moko/docker/mysql8/conf    # 配置文件路径
mkdir -p /moko/docker/mysql8/logs    # 日志路径
mkdir -p /moko/docker/mysql8/data    # d数据路径

3、创建mysql8.0配置文件

vim /moko/docker/mysql8/conf/my.cnf

[mysqld]
#datadir=/usr/local/mysql/data
default_authentication_plugin=mysql_native_password  #使用mysql8以前的密码插件,以便navicat等工具能够正常连接
default-storage-engine=INNODB
character_set_server = utf8
secure_file_priv=/var/lib/mysql
[mysqld_safe]
character_set_server = utf8mb4
[mysql]
default-character-set = utf8utf8mb4
[mysql.server]
default-character-set = utf8utf8mb4
[client]
default-character-set = utf8utf8mb4

4、部署容器

书写一个启动脚本

vim startMysql8Container.sh

docker run -d -p 3306:3306 --name mysql8 \
-v /moko/docker/mysql8/logs:/var/log/mysql \
-v /moko/docker/mysql8/data:/var/lib/mysql \
-v /moko/docker/mysql8/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--net applicationNet \
--ip 192.168.2.215 \
mysql:8.0

导入: 先根据上面二中的命令将 sql 脚本复制到容器中,然后进入数据库,先创建数据库: 然后再导入:

# 1.获取容器长 ID
docker inspect -f '{{.ID}}' mysql8.0
# 2.将sql脚本复制到容器中
sudo docker cp host_path containerID:container_path
# 3.进入容器,进入mysql,创建数据库,并 use 选中,再导入
source /tmp/abc.sql

错误

root@17da121baa26:/# mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

解决

在启动命令中把密码值为空,输入密码时直接回车

MYSQL_ROOT_PASSWORD=yes

两条命令来修改密码:

1.   ALTER USER 'root'@'%' IDENTIFIED BY 'mysql1024.' PASSWORD EXPIRE NEVER;
2.   ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql1024.';

退出重启一下

如果还是不行,在首次配置时,可以在配置文件my.cof中设置skip-grant-tables参数,该命令作用是跳过授权表,就是说谁都能进入MySQL看到所有数据表,输入任意字符账号密码都可以,当忘记账号密码时可以使用改命令修改密码,但是要随用随关,重启mysql,不然服务器上会有很大的风险。 输入登陆的指令,但是可任意输入密码,都可以登录,

skip-grant-tables

五、部署redis

docker pull redis

先在主机创建工作文件夹

mkdir -p /moko/docker/redis/conf    # 配置文件路径
mkdir -p /moko/docker/redis/data    # 数据路径

http://www.redis.cn/download.html 官网下载压缩包,获取到redis.conf文件,在/moko/docker/redis/conf中创建redis.conf文件

# redis 密码
requirepass Klkjyfb@123

# key 监听器配置
# notify-keyspace-events Ex

# 配置持久化文件存储路径
dir /redis/data
# 配置rdb
# 15分钟内有至少1个key被更改则进行快照
save 900 1
# 5分钟内有至少10个key被更改则进行快照
save 300 10
# 1分钟内有至少10000个key被更改则进行快照
save 60 10000
# 开启压缩
rdbcompression yes
# rdb文件名 用默认的即可
dbfilename dump.rdb

# 开启aof
appendonly yes
# 文件名
appendfilename "appendonly.aof"
# 持久化策略,no:不同步,everysec:每秒一次,always:总是同步,速度比较慢
# appendfsync always
appendfsync everysec
# appendfsync no

启动容器脚本

docker run -p 6379:6379 --name redis \
-v /moko/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /moko/docker/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf

redis-server /etc/redis/redis.conf:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动

进入Redis容器测试

### 通过 Docker 命令进入 Redis 容器内部
docker exec -it redis /bin/bash
### 进入 Redis 控制台
redis-cli
### 添加一个变量为 key 为 name , value 为 moko 的内容
> set name moko
### 查看 key 为 name 的 value 值
> get name

六、Idea docker打包

一、配置Linux系统上的docker

1.1 修改文件

修改文件:vi /lib/systemd/system/docker.service,将第五行改为:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

注意这里的端口是2375

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service time-set.target
Wants=network-online.target containerd.service
Requires=docker.socket

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

1.2 重新加载配置文件 重启docker服务

//重新加载服务的配置文件
systemctl daemon-reload

//重启docker服务以下两个命令任意选一个
//命令1
service docker restart
//命令2
systemctl restart docker

二、配置IDEA Docker integration插件

在这里插入图片描述

在Setting设置中搜索 “ docker” 在箭头4框内输入自己服务器的ip加给docker配置的端口,并且箭头5位置出现该提示则代表成功!

成功后直接apply
在这里插入图片描述

直接点击这里连接到远程服务器上的docker

三、配置项目

3.1置需要打包成docker镜像的Maven项目的POM.XML文件

 	<properties>
        <java.version>1.8</java.version>
         <!--打包后镜像的前缀-->
        <docker.image.prefix>moko</docker.image.prefix>
    </properties>

    <build>
        <plugins>
            <!--镜像启动插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--配置部署到远程docker中-->
            <!--一键部署-->
            <plugin>
            	<!--启动插件-->
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!--指定生成的镜像名-->
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!--基础镜像-->
                    <baseImage>java:8</baseImage>
                    <!--作者信息-->
                    <maintainer>lilinjiang</maintainer>
                    <!--切换到/ROOT目录-->
                    <workdir>/ROOT</workdir>
                    
                    <cmd>["java","-version"]</cmd>
                    <entryPoint>["java","-jar","-Duser.timezone=GMT+08","${project.build.finalName}.jar"]</entryPoint>
                    <!--指定远程 docker api地址-->
                    <dockerHost>http://xxx.xxx.xxx:2375</dockerHost>
                    
                    <resources>
                        <resource>
                            <targetPath>/ROOT</targetPath>
                            <!--用于指定需要复制的跟目录 此处配置的${project.build.directory}是 即对应 target 目录-->
                            <directory>${project.build.directory}</directory>
                            <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

3.2 通过Maven 清理 并 打包
在这里插入图片描述
pom设置docker打包时区问题解决

 <entryPoint>["java","-jar","-Duser.timezone=GMT+08","${project.build.finalName}.jar"]</entryPoint>

四、构建docker镜像

4.1 准备工作

  • 需要配置 maven 环境变量 否则将无法使用maven命令

  • 给maven中添加docker-maven-plugin的白名单,在pluginGroups节点中添加如下代码。(直接搜索关键字找到!!!!)

    <pluginGroup>com.spotify</pluginGroup>

  • 可能会用到的baseImg镜像依赖(打包时会自动下载jdk依赖,若未自动下载请手动拉取下列镜像任意一个即可)


docker pull openjdk:8u191-jdk-alpine3.9

docker pull openjdk:8-jdk-alpine

4.2 构建

  • 在你要构建的项目上右键开启命令行

在这里插入图片描述

  • 在打开的命令行中输入一下命令
 mvn docker:build

然后我们就能在docker中看到生成的镜像了

在这里插入图片描述

4.3 配置运行容器

右键镜像选择 create container 填写上面信息 做好端口映射run 运行即可

在这里插入图片描述
一些问题参考:
IDEA-Docker插件控制台中文乱码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值