二、docker的常用命令及常用中间件配置(持续补充ing)

一、启动相关

1.设置容器开机启动

在我们使用镜像run一个容器的时候,希望这个容器随着docker的启动而启动(我的情况是虚拟机经常开关机,所以docker肯定会经常关闭再开启,所以我run的容器需要跟随docker的启动起来,不想手动一个个启动)

1)设置docker开机自启

systemctl enable docker

2)初次启动容器设置自启

添加如下参数

--restart=always 

举例

docker run  --restart=always  mysql:8.0.30

3)启动容器
如果某个容器停了,可以再次启动

docker restart 容器id

如果run的时候没有加这个参数,后期想让他开机启动,请跳转下方修改相关。


二、查询相关

1.查询所有容器(包括停止的)

docker ps -a

三、修改相关

1.指定容器开机自启动

docker update --restart=always  容器id

四、宿主机与容器交互相关

1.将指定容器内的文件复制到宿主机当前目录下

docker container cp nginx:/etc/nginx .

注意命令最后是空格跟上一个点
在这里插入图片描述

五、安装中间件相关

1.mysql(5和8)

①创建mysql实例并运行

docker run -d -p 3306:3306 --privileged=true \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456  \
--name mysql mysql:5.7

参数说明
–name:表示为当前容器起一个名字
-p3306:3306:将容器的3306端口映射到主机的3306端口
-v/mydata/mysql/conf:/etc/mysgl:将配置文件夹挂载到主机
-v/mydata/mysql/log:/var/log/mysgl:将日志文件夹挂载到主机
-v/mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
-d 表示mysql以后台方式运行

②配置mysql的配置文件

cd /mydata/mysql/conf/
vim my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

重启mysql

docker restart mysql

不在mysql5存在的基础上,单独部署mysql8,非共存方法。
①先跑一个mysql8,用于拷贝相关配置文件到宿主机

mkdir -p /mydata/mysql8
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20
docker cp  mysql:/etc/mysql   /mydata/mysql8/
cd /mydata/mysql8/mysql/conf.d

②增加配置文件

vim my.cnf
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
[client]
default-character-set=utf8

删除第一个mysql8实例

docker stop mysql 
docker rm mysql

重新创建mysql8实例

docker run \
-p 3306:3306 \
--name mysql \
--privileged=true \
--restart unless-stopped \
-v /mydata/mysql8/mysql:/etc/mysql \
-v /mydata/mysql8/logs:/logs \
-v /mydata/mysql8/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.20

之后你可以进入mysql容器,配置一些自己需要的东西

docker exec -it mysql  /bin/bash
mysql -u root -p

2.安装redis

①下载redis镜像

docker pull redis:5.0.5

②在宿主中创建目录

mkdir -p /mydata/redis

③宿主机下初始化redis.conf文件

touch /mydata/redis/redis.conf 

④运行一个redis实例

docker run --restart=always  -p 6379:6379 --name redis --privileged=true \
-v /mydata/redis/redis.conf:/etc/redis/redis.conf \
-v /mydata/redis/data:/data \
-d redis:5.0.5 redis-server /etc/redis/redis.conf

如果需要增加密码,加上这个参数即可,这里密码是123456

--requirepass 123456

–restart=always:表示每次docker重启后会自启动,其余参数参考上述mysql相关配置
⑤进入redis检查

docker exec -it redis /bin/bash
redis-cli

简单测试
在这里插入图片描述
⑥设置持久化策略(虚拟机可选)
这样数据就不是只在内存中了,会持久化到磁盘,防止每次重新启动虚拟机,缓存都没有了。
去宿主机修改对应配置
退出到宿主机

exit
exit

编辑redis.conf文件

vim /mydata/redis/redis.conf
appendonly yes

重启redis

docker restart redis

测试redis数据是不是会持久化到磁盘

前提是已经修改完配置文件并且已经重启redis实例,先进入redis进行随便一个数据的插入,然后退出到宿主机,重启redis,再次进入redis中发现数据还在则证明配置生效。

3.安装elasticsearch

1.下载es镜像

docker pull elasticsearch:7.4.2

2.在宿主机上创建目录

mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
mkdir -p /mydata/elasticsearch/plugins

重新设置文件夹权限,任何用户任何组都有读写权限

chmod -R 777 /mydata/elasticsearch

3.创建elasticsearch.yml文件,并配置

echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml

4.启动一个实例

docker run --restart=always --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e  "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v  /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2

-p 暴露两个端口
-e 指定一个参数
discovery.type=single-node:表示单节点运行
-Xms64m -Xmx128m:设置es内存初始内存占用64mb,最大占用128mb
-v 挂载,docker容器中的文件和宿主机对应关联上,在容器外部也就是在宿主机进行文件的修改,容器里边的es也会对应修改,不用每次都进入容器内进行操作。

5.验证是否安装成功
浏览器访问如下地址

http://你宿主机的ip地址:9200/

在这里插入图片描述

4.安装kibana

1.下载kibana镜像

docker pull kibana:7.4.2

2.运行一个实例

docker run --restart=always --name kibana \
-p 5601:5601 \
--link es容器名称(安装es时起的别名elasticsearch ) \
-e "ELASTICSEARCH_URL=http://宿主机ip地址:9200"  \
-d kibana:7.4.2

–link :同一个宿主主机上的多个docker容器之间如果需要进行通信,第一种最容易想到的方式就是使用容器自身的ip地址、宿主主机的ip+容器暴露出的端口号来通信,我们知道默认情况下docker重新run后,对应的IP地址就会改变,这样如果两个容器之间通信就会变得非常麻烦,每次都要修改通信的IP地址。这个时候 --link参数就派上大用场了,它会给要链接的容器设定一个通信的别名,即使重启后IP地址发生了改变,依然可以正常通信。
link 格式:
– link:目标容器名称:别名(别名可以不写)

3.验证是否运行成功

http://宿主机地址:5601/

如果是这个页面,先等一会再访问一下,看看是否启动成功
在这里插入图片描述
如果长时间还是这个页面,需要查询相关日志

docker logs 容器ID前三位

情况举例
在这里插入图片描述
在这里插入图片描述
启动成功页面
在这里插入图片描述

在这里插入图片描述

5.安装Nginx

1.前期准备
由于nginx要创建的配置多一些,这里先跑一个实例,把配置信息从容器中复制到宿主机。

如果没有Nginx1.10版本,docker会自动下载,这里就不docker pull了
①运行一个临时的Nginx容器

docker run -p 80:80 --name nginx -d nginx:1.10

②宿主机新建目录

mkdir /mydata/nginx
cd /mydata/nginx

③将容器内的配置文件拷贝到当前宿主机目录
cp 后跟的是容器的名称,最后是空格跟上点
格式:docker container cp 空格 容器名 冒号 容器内路径 空格 点

docker container cp nginx:/etc/nginx .

④修改宿主机文件夹名称

mv nginx conf

⑤再次创建nginx目录,并把conf整个移动到该目录下

mkdir /mydata/nginx
mv conf /mydata/nginx

⑥停止容器并删除

docker stop nginx
docker rm nginx

2.运行nginx实例

docker run --restart=always -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10

6.安装Jenkins(单个maven项目完成,探索复杂项目…)

先更新宿主机的时间,后续会挂载对应时间配置。
查询当前系统时间

date

①查看时区,如果已是上海时区可不用设置

timedatectl status | grep 'Time zone'

②设置硬件时钟调整为与本地时钟一致

timedatectl set-local-rtc 1

③设置时区为上海

timedatectl set-timezone Asia/Shanghai

docker安装最新版本的Jenkins
这里注意一点,我们之前了解的都是如果不指定版本,那么默认下载的就是最新版本,从其他博客哪里了解到安装jenkins推荐的版本叫jenkins/jenkins

我们先看下jenkins有哪些版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这块,都说了不建议使用这样的方式安装jenkins改用jenkins/jenkins:lts这种方法。
所以以下这种方式不推荐

docker pull jenkins

拉取jenkins最新版本镜像。
还是去官网溜达一圈
官网安装地址
在这里插入图片描述
这俩docker随便一个地址都行,都是跳转docker镜像仓库地址,你以为有区别实则我都看了。

在这里插入图片描述
这块写着最新的lts版本,但是我还是想进去看看都有哪些版本
在这里插入图片描述
在这里插入图片描述
在你拉取最新镜像时很大概率会超时,拉几次失败几次
参考这篇博客,增加镜像加速,代码我也贴出来

sudo tee /etc/docker/daemon.json <<EOF
 
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://huecker.io",
        "https://dockerhub.timeweb.cloud",
        "https://noohub.ru"
    ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

在这里插入图片描述
我这里拉取和运行分开执行,正常直接docker run,镜像不存在会自动下载

docker pull  jenkins/jenkins:2.462.2-lts

如果你要重新启动一个容器,请注意一下,这个宿主机的挂载目录,如果想使用之前的宿主机目录,需要情况宿主机目录的数据,如果是使用其他目录则不需要,我这里使用的宿主机目录地址为/mydata/jenkins_home,如果重新run一个容器,需要把它子集所有的文件以及目录清空后在执行docker run

docker run \
--name  jk \
--restart=on-failure \
--privileged=true \
--env JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m" \
-d \
-u root \
-p 8080:8080 \
-p 8888:8888 \
-p 50000:50000 \
-v /mydata/jenkins_home:/var/jenkins_home \
-v /mydata/java/jdk17:/var/jenkins_home/java \
-v /mydata/maven/maven-3.9.8:/var/jenkins_home/maven \
-v /etc/localtime:/etc/localtime \
 jenkins/jenkins:2.462.2-lts

前缀/mydata都是宿主机地址奥,-u root这个参数不加,jenkins一直报没有权限,目前没找到其他方法。
报错内容如下
在这里插入图片描述

加上之后,启动成功。
阅读官方文档可以得知,我们可以设置jvm相关参数等。
文档地址
在这里插入图片描述

找到初始密码

docker logs -f jk

启动失败,报错
在这里插入图片描述

在这里插入图片描述
解决方法:我们宿主机挂在的这个目录,找到这个配置文件

hudson.model.UpdateCenter.xml

切换国内镜像

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

完整内容如下:

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>

在这里插入图片描述
修改完成后,重启容器

docker restart jk

再次查询日志,
找到密码之后复制,按ctrl+C退出。

在这里插入图片描述

访问地址:http://192.168.56.10:8080
初次进入输入你的初始密码
在这里插入图片描述

这里选择插件来安装
在这里插入图片描述

如果是选择推荐插件下载,有下载失败的情况。如图
在这里插入图片描述
需要更新插件源。
进入自己选择插件安装页面
在这里插入图片描述
在这里插入图片描述
先不创建新用户,还是使用admin账号
在这里插入图片描述

访问jk地址,我这里就使用默认的地址了。
在这里插入图片描述
登录名:admin已经提示给你了,密码就是你之前获取日志的密码。后续自己可以创建一个账号和对应密码,这里不在赘述。
在这里插入图片描述

6.1jk更换插件下载源

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
选择对应源:选择网址
复制update-center.json文件的链接,放到刚刚的jk配置位置。
在这里插入图片描述

在这里插入图片描述

6.2 jk更换为中文

安装中文插件
在这里插入图片描述

搜索(模糊搜索也可):Localization: Chinese (Simplified)

Localization: Chinese (Simplified)

勾选上,然后install。
在这里插入图片描述
等待下载success。
在这里插入图片描述
在这里插入图片描述
重启jk,可以docker 重启,或者在url中增加restart进行重启。

http://192.168.56.10:8080/restart

在这里插入图片描述
在这里插入图片描述
等他重启完即可。
在这里插入图片描述
账号为

admin

密码还是你的初始密码
至此,中文设置完毕!
在这里插入图片描述

6.3设置java和maven

6.3.1配置java环境

我们启动时挂载了jdk17和maven相关目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果完全按照我的步骤来的话,可以直接复制我的地址

/var/jenkins_home/java
6.3.2配置maven

在这里插入图片描述
如果完全按照我的步骤来的话,可以直接复制我的地址

/var/jenkins_home/maven/conf/settings.xml

在这里插入图片描述
如果完全按照我的步骤来的话,可以直接复制我的地址

/var/jenkins_home/maven
6.3.3安装必要插件

①git插件
在这里插入图片描述
在这里插入图片描述
②maven插件
在这里插入图片描述
③gitee(我的代码都在gitee上,所以这里安装一个gitee)
在这里插入图片描述
配置gitee私人令牌
在这里插入图片描述
在这里插入图片描述

https://gitee.com

在这里插入图片描述

去gitee上生成令牌
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
记录好生成的令牌。回到jk
在这里插入图片描述
在这里插入图片描述

进行测试
在这里插入图片描述
在这里插入图片描述
最后再最外层进行应用和保存
在这里插入图片描述

重启jk
在这里插入图片描述

6.3.4测试jk及对应配置是否生效
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

写了一个简单的测试demo,地址:https://gitee.com/july01/jk,需要自取
https版git地址:

https://gitee.com/july01/jk.git

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
成功构建!!!,下一步研究脚本,因为maven构建时没有跳过test而且jar包也没运行。

6.4设置构建脚本

6.4.1maven打包跳过test

在这里插入图片描述

clean install -U -Dmaven.test.skip=true

做一些调整,具体有很多配置,需要时间去研究
在这里插入图片描述

6.4.2配置简单的脚本命令(伪脚本)

在配置脚本之前,进入容器创建一个存放jar包的目录,不用它workspace的默认生成的目录。

docker exec -it jk /bin/bash

这个目录/var/jenkins_home是我们挂载的目录,宿主机也能看到,我就放到这里了,方便后续有问题进行反编译排查。

mkdir /var/jenkins_home/jarhome

进行脚本配置,我这里由于没配置打包的后jar包名,所以默认为jk-0.0.1-SNAPSHOT.jar
在控制台有输出你的工作区目录信息。
查询日志信息
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

打包完也有输出jar包路径
在这里插入图片描述

设置构建之后,执行脚本
在这里插入图片描述

#删除之前的jar包
rm -rf /var/jenkins_home/jarhome/jk-0.0.1-SNAPSHOT.jar
#把jar包移动到指定目录,存在则覆盖
cp -rf /var/jenkins_home/workspace/test/target/jk-0.0.1-SNAPSHOT.jar  /var/jenkins_home/jarhome/
#进入指定目录
cd /var/jenkins_home/jarhome/
#阻止jenkins杀死项目进程
export BUILD_ID=dontKillMe
#模拟执行启动脚本
nohup java -jar jk-0.0.1-SNAPSHOT.jar &

在这里插入图片描述
再次进行构建,
在这里插入图片描述
查询日志
在这里插入图片描述

访问java项目
如果你之前看了我虚拟机的教程,配置的ip和我一致,直接访问下方即可

ps:之前命令docker run时没有映射8888端口,后续我增加了对8888的端口映射,如果你之前按照我的方式进行创建时,你可以直接stop jk然后rm jk,因为你已经把jk的目录挂载到了宿主机,所以尽情删除吧,重启run一个容器,用我最新的命令即可,密码还是之前生成的密码登录即可。

http://192.168.56.10:8888/api/test

否则为

http://宿主机ip:8888/api/test

结果
在这里插入图片描述

有细心的同学发现,这个构建记录的时间好像不太对。
还需改一个地方,点机账户,选择设置。
这里账户我换成july,你们的应该是admin。
在这里插入图片描述
设置亚洲:上海。之后重启容器即可
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我柒月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值