欢迎光临,赤鹿小组
记录过程,分享经验

基于Docker安装破解版Jira(无坑)

肓己阅读(8090)

前言

因为现用的Jira需要下载一个插件,这个插件是需要付费的,价格大概是$18000……

于是决定重建Jira软件系统,并采用Docker来实现破解版的Jira安装。

步骤

1、下载镜像

一定要安装jira-software(不是jira),否则没有agile

[[email protected] ~]# docker pull dchevell/jira-software:7.13.0
……

2、运行容器

[[email protected] data]# docker run -d -it -p  8080:8080  --privileged  -m 4096M -v /data/jira-data:/var/atlassian/application-data/jira  -v /etc/localtime:/etc/localtime --name jira dchevell/jira-software:7.13.0

3、拷贝文件到容器内

# 下载3个文件
# 下载3个文件
[[email protected] data]# wget https://github.com/hlwojiv/some-software/raw/master/Jira/mysql-connector-java-5.1.25-bin.jar
[[email protected] data]# wget https://github.com/hlwojiv/some-software/raw/master/Jira/atlassian-universal-plugin-manager-plugin-2.22.4.jar
[[email protected] data]# wget https://github.com/hlwojiv/some-software/raw/master/Jira/atlassian-extras-3.2.jar

# 拷贝mysql-connector
[[email protected] data]# docker cp mysql-connector-java-5.1.25-bin.jar jira:/opt/atlassian/jira/atlassian-jira/WEB-INF/lib/
# 进入容器修改mysql-connector的权限
[[email protected] data]# docker exec -it jira bash
bash-4.4# chmod 755 /opt/atlassian/jira/atlassian-jira/WEB-INF/lib/mysql-connector-java-5.1.25-bin.jar
bash-4.4# exit
# 重启容器
[[email protected] data]# docker restart jira
jira

3、Web设置

浏览器访问JiraWeb,语言可以设为中文,选择「我将设置它自己」——「下一步」

数据库设置,数据库类型选择「MySQL」,接着填入你的MySQL连接信息(需要你在你的MySQL数据库中创建数据库,数据库的字符类型必须是utf8),测试可以连接之后点击「下一步」

设置应用程序的属性——「下一步」

申请许可证关键字,点击「生成Jira试用许可证」

需要注册账号,注册完之后重新回到这个页面,选择相关信息,点击「Generate License」

点击「Yes」

页面就会带着你的许可证关键字回到Jira的设置页面,接着点击「下一步」

等待一会就进入设置管理员页面,填入一些信息即可,接着「下一步」

点击「完成」即完成设置

4、拷贝文件到容器内

# 拷贝atlassian-extras到容器内
[[email protected] data]# docker cp atlassian-extras-3.2.jar jira:/opt/atlassian/jira/atlassian-jira/WEB-INF/lib/
# 进入容器设置atlassian-extras的权限
[[email protected] data]# docker exec -it jira bash
bash-4.4# chmod 755 /opt/atlassian/jira/atlassian-jira/WEB-INF/lib/atlassian-extras-3.2.jar
# 重启容器
[[email protected] data]# docker restart jira
jira

# 拷贝插件到容器内
[[email protected] data]# docker cp atlassian-universal-plugin-manager-plugin-2.22.4.jar jira:/opt/atlassian/jira/atlassian-jira/WEB-INF/atlassian-bundled-plugins/
# 进入容器内修改插件的属性
[[email protected] data]# docker exec -it jira bash
bash-4.4# chmod 755  /opt/atlassian/jira/atlassian-jira/WEB-INF/atlassian-bundled-plugins/atlassian-universal-plugin-manager-plugin-2.22.4.jar
# 删除另一个插件
bash-4.4# rm -rf /opt/atlassian/jira/atlassian-jira/WEB-INF/atlassian-bundled-plugins/atlassian-universal-plugin-manager-plugin-2.22.9.jar

破解结束,进入Jira下载任意插件,申请试用,自动破解

5、下面来下载一个收费软件试试

安装完了点击「获取许可证」



接着在「管理应用」中可以看到,该插件已经破解了

Docker查看所有容器ip命令工具

肓己阅读(468)

使用一个简单的获取 docker 中所有容器ip 的工具

步骤

1、安装这个获取所有容器 IP 的工具

$ curl -L https://github.com/hlwojiv/tools/releases/download/1.0/docker-allip -o /usr/local/bin/docker-allip && chmod +x /usr/local/bin/docker-allip

2、使用工具

$ docker-allip
/test1 -- 172.18.0.9
/test2 -- 172.18.0.10
……

利用 docker 部署 gitlab

Seichung阅读(1355)

Git (读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。「词条来源百度百科」

1、查找 gitlab 镜像

[[email protected] ] docker search gitlab

如果出现 Error response from daemon: Get https://index.docker.io/v1/search?q=gitlab&n=25: dial tcp: lookup index.docker.io: no such host 报错,重启docker服务即可,如下:

docker

2、拉取 gitlab 镜像,成功 如下图:

[[email protected] ] docker pull gitlab
Using default tag: latest
Trying to pull repository docker.io/gitlab/gitlab-ce ...
latest: Pulling from docker.io/gitlab/gitlab-ce
7e6591854262: Pull complete
089d60cb4e0a: Pull complete
9c461696bc09: Pull complete
45085432511a: Pull complete
fe923449954f: Pull complete
f7944584e435: Pull complete
47472ef1aa19: Pull complete
80d72d7c3c00: Pull complete
bb2031d6299d: Pull complete
7b6ae18e4081: Pull complete
Digest: sha256:7db74a350cc4a099c9b3fa4dcf533f7f0e9f531e44fe653c5bde26d67441cbd1
Status: Downloaded newer image for docker.io/gitlab/gitlab-ce:latest

[[email protected] ] docker images

docker

3、启动 gitlab ,如下图:

[[email protected] ] docker run -d --name gitlab --hostname 192.168.68.128 --restart always -p 8443:443 -p 8000:80 -p 2626:22 -v /data/gitlab/conf:/etc/gitlab -v /data/gitlab/logs:/var/log -v /data/gitlab/data:/var/opt/gitlab docker.io/gitlab/gitlab-ce:latest

docker

4、修改配置文件

[[email protected] ] vim /data/gitlab/conf/gitlab.rb

external_url 修改为 external_url 'http://192.168.68.128'

gitlab_rails['gitlab_shell_ssh_port'] 修改为 gitlab_rails['gitlab_shell_ssh_port'] = 2626

5、重新读取 gitlab 配置文件,可以选择 restart 或者 gitlab-ctl:

gitlab-ctl 方式:

[[email protected] ] docker ps -a
[[email protected] ] docker exec -it 7f0ad4d84ec0 bash
[email protected]:/# gitlab-ctl reconfigure

docker

成功如下图:

docker

restart 方式,成功如下图:

[[email protected] ] docker restart gitlab

docker

6、通过 nginx 反向代理 gitlab 的 8000 端口

[[email protected] ] vim /data/nginx/conf/conf.d/gitlab.com.conf

server {
  listen 80;
  server_name localhost;

  location / {
   proxy_pass http://127.0.0.1:8000/;
   proxy_redirect off;
   proxy_set_header Host  $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   access_log /data/logs/gitlab.com-access.log log_access;
   error_log  /data/logs/gitlab.com-error.log;
  }
}

7、访问 gitlab,http://192.168.68.128 ,如下图:
gitlab

能正常访问,则说明 gitlab 部署成功!

docker解决alpine镜像java日志中文问号乱码问题(修改语言环境)

肓己阅读(2940)

前言

笔者使用 alpine 作为基础镜像构建了 jdk8 镜像,为线上业务的 java 微服务架构提供支持,但是有容器运行的 java 服务中打印的日志中一旦出现中文,就会出现诸如以下的 ???? 的乱码:

鉴于笔者已经解决该问题,如有需要可以从以下两种方式获取笔者构建好的镜像和dockerfile。

1) 直接从 dockerhub 中拉取笔者构建好的基于 alpine 的 jdk8 镜像:

$ docker pull hlwojiv/alpine-jdk8

2) 从 github 中拉取 dockerfile:

$ git clone https://github.com/hlwojiv/docker-alpine-jdk8.git

以下是解决该问题的方法,转载自 github 中这个 issues 中的解决方法。

步骤

1、使用 alpine 构建镜像时,在 dockerfile 修改其语言环境:

FROM alpine:3.6

# ---not shown here---

# Install language pack
RUN apk --no-cache add ca-certificates wget && \
    wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-2.25-r0.apk && \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-bin-2.25-r0.apk && \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-i18n-2.25-r0.apk && \
    apk add glibc-bin-2.25-r0.apk glibc-i18n-2.25-r0.apk glibc-2.25-r0.apk

# Iterate through all locale and install it
# Note that locale -a is not available in alpine linux, use `/usr/glibc-compat/bin/locale -a` instead
COPY ./locale.md /locale.md
RUN cat locale.md | xargs -i /usr/glibc-compat/bin/localedef -i {} -f UTF-8 {}.UTF-8

# Set the lang, you can also specify it as as environment variable through docker-compose.yml
ENV LANG=en_US.UTF-8 \
    LANGUAGE=en_US.UTF-8

# --- not show here---

同级目录下创建 locale.md 文件,将以下内容拷贝入 locale.md

aa_DJ
aa_ER
aa_ET
af_ZA
am_ET
an_ES
ar_AE
ar_BH
ar_DZ
ar_EG
ar_IN
ar_IQ
ar_JO
ar_KW
ar_LB
ar_LY
ar_MA
ar_OM
ar_QA
ar_SA
ar_SD
ar_SY
ar_TN
ar_YE
as_IN
ast_ES
ayc_PE
az_AZ
be_BY
bem_ZM
ber_DZ
ber_MA
bg_BG
bho_IN
bn_BD
bn_IN
bo_CN
bo_IN
br_FR
brx_IN
bs_BA
byn_ER
ca_AD
ca_ES
ca_FR
ca_IT
crh_UA
csb_PL
cs_CZ
cv_RU
cy_GB
da_DK
de_AT
de_BE
de_CH
de_DE
de_LU
doi_IN
dv_MV
dz_BT
el_CY
el_GR
en_AG
en_AU
en_BW
en_CA
en_DK
en_GB
en_HK
en_IE
en_IN
en_NG
en_NZ
en_PH
en_SG
en_US
en_ZA
en_ZM
en_ZW
es_AR
es_BO
es_CL
es_CO
es_CR
es_CU
es_DO
es_EC
es_ES
es_GT
es_HN
es_MX
es_NI
es_PA
es_PE
es_PR
es_PY
es_SV
es_US
es_UY
es_VE
et_EE
eu_ES
fa_IR
ff_SN
fi_FI
fil_PH
fo_FO
fr_BE
fr_CA
fr_CH
fr_FR
fr_LU
fur_IT
fy_DE
fy_NL
ga_IE
gd_GB
gez_ER
gez_ET
gl_ES
gu_IN
gv_GB
ha_NG
he_IL
hi_IN
hne_IN
hr_HR
hsb_DE
ht_HT
hu_HU
hy_AM
ia_FR
id_ID
ig_NG
ik_CA
is_IS
it_CH
it_IT
iu_CA
ja_JP
ka_GE
kk_KZ
kl_GL
km_KH
kn_IN
kok_IN
ko_KR
ks_IN
ku_TR
kw_GB
ky_KG
lb_LU
lg_UG
li_BE
lij_IT
li_NL
lo_LA
lt_LT
lv_LV
mag_IN
mai_IN
mg_MG
mhr_RU
mi_NZ
mk_MK
ml_IN
mni_IN
mn_MN
mr_IN
ms_MY
mt_MT
my_MM
nb_NO
nds_DE
nds_NL
ne_NP
nhn_MX
niu_NU
niu_NZ
nl_AW
nl_BE
nl_NL
nn_NO
nr_ZA
nso_ZA
oc_FR
om_ET
om_KE
or_IN
os_RU
pa_IN
pa_PK
pl_PL
ps_AF
pt_BR
pt_PT
ro_RO
ru_RU
ru_UA
rw_RW
sa_IN
sat_IN
sc_IT
sd_IN
se_NO
shs_CA
sid_ET
si_LK
sk_SK
sl_SI
so_DJ
so_ET
so_KE
so_SO
sq_AL
sq_MK
sr_ME
sr_RS
ss_ZA
st_ZA
sv_FI
sv_SE
sw_KE
sw_TZ
szl_PL
ta_IN
ta_LK
te_IN
tg_TJ
th_TH
ti_ER
ti_ET
tig_ER
tk_TM
tl_PH
tn_ZA
tr_CY
tr_TR
ts_ZA
tt_RU
ug_CN
uk_UA
unm_US
ur_IN
ur_PK
uz_UZ
ve_ZA
vi_VN
wa_BE
wae_CH
wal_ET
wo_SN
xh_ZA
yi_US
yo_NG
yue_HK
zh_CN
zh_HK
zh_SG
zh_TW
zu_ZA

这样构建出来的 alpine 镜像就是 en_US.UTF-8 的编码环境

2、构建镜像

$ docker build -t utf8-alpine .
……

3、运行构建的镜像,查看编码环境

$ docker run -itd utf8-alpine sh
$ docker exec -it d830c8e49b1c sh
/opt # env
LANGUAGE=en_US.UTF-8
HOSTNAME=d830c8e49b1c
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/jdk/bin
LANG=en_US.UTF-8
PWD=/opt
JAVA_HOME=/usr/java/jdk
/opt # /usr/glibc-compat/bin/locale -a
……
zh_CN.utf8
zh_HK.utf8
zh_SG.utf8
zh_TW.utf8
zu_ZA.utf8

至此为 alpine 修改语言环境的步骤结束。

修改完后 java 日志中的中文也已经正常显示:

Docker启动容器报错: connect: no route to host

肓己阅读(1688)

前言

笔者在重启了Docker服务后,发现其中一个api容器起不来了,这个容器在内部链接了另外一个MySQL容器,而那个MySQL容器是已经正常运行了。笔者通过docker logs container查看api容器启动日志,发现了这个错误:

[ORM]2018/10/31 09:05:36 register db Ping `default`, dial tcp 192.168.1.54:3306: connect: no route to host
2018/10/31 09:05:36.636 [E] [command.go:54] 注册默认数据库失败: register db Ping `default`, dial tcp 192.168.1.54:3306: connect: no route to host

解决方案

通过在防火墙配置文件的增加一条规则,此问题得以解决,规则如下:

<rule family="ipv4">
     <source address="172.17.0.0/16"/>
     <accept/>
 </rule>

其中address部分改为自己机器docker0网卡的ip地址,然后将规则加入防火墙配置:

[[email protected] /root]#cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected inco
ming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <rule family="ipv4">
       <source address="172.17.0.1/16"/>
       <accept/>
  </rule>
</zone>

然后重启防火墙:

[[email protected] /root]#systemctl restart firewalld.service

然后该容器就可以正常启动了,问题解决。

注意,如果防火墙会影响api服务的访问,做完这些操作时请记得停止防火墙服务;笔者在这里就给自己挖了一个坑,导致后台无法访问api,把防火墙停掉即可。

Docker修改正在运行的容器的时区

肓己阅读(450)

前言

笔者在对网站日志(nginx)做分析时,发现时间不在东八区,也就服务器时间和当前时间对不上,而该Web网站是放在Nginx容器中,本文是修改已经运行了的容器时区做的一个记录。

步骤

1、进入容器后,执行tzselect,然后依次输入,4-9-1-1,再执行拷贝操作

[[email protected] /data/nginx80]#docker exec -it nginx80 bash
[email protected]:/# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
 1) Africa
 2) Americas
 3) Antarctica
 4) Asia
 5) Atlantic Ocean
 6) Australia
 7) Europe
 8) Indian Ocean
 9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.

# ? 4

Please select a country whose clocks agree with yours.
 1) Afghanistan           18) Israel                35) Palestine
 2) Armenia               19) Japan                 36) Philippines
 3) Azerbaijan            20) Jordan                37) Qatar
 4) Bahrain               21) Kazakhstan            38) Russia
 5) Bangladesh            22) Korea (North)         39) Saudi Arabia
 6) Bhutan                23) Korea (South)         40) Singapore
 7) Brunei                24) Kuwait                41) Sri Lanka
 8) Cambodia              25) Kyrgyzstan            42) Syria
 9) China                 26) Laos                  43) Taiwan
10) Cyprus                27) Lebanon               44) Tajikistan
11) East Timor            28) Macau                 45) Thailand
12) Georgia               29) Malaysia              46) Turkmenistan
13) Hong Kong             30) Mongolia              47) United Arab Emirates
14) India                 31) Myanmar (Burma)       48) Uzbekistan
15) Indonesia             32) Nepal                 49) Vietnam
16) Iran                  33) Oman                  50) Yemen
17) Iraq                  34) Pakistan

# ? 9

Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time

# ? 1

The following information has been given:

    China
    Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Local time is now:      Mon Dec 17 14:44:19 CST 2018.
Universal Time is now:  Mon Dec 17 06:44:19 UTC 2018.
Is the above information OK?
1) Yes
2) No

# ? 1

You can make this change permanent for yourself by appending the line
​        TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
[email protected]:/# date
Mon Dec 17 06:44:40 UTC 2018
[email protected]:/# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[email protected]:/# date
Mon Dec 17 14:44:46 CST 2018
[email protected]:/# exit
exit

2、重启容器

[[email protected] /data/nginx80]#docker restart nginx80

Docker修改已停止运行容器配置文件

肓己阅读(1234)

前言

基于Docker的Nginx服务中,笔者修改了Nginx的配置文件,结果重启容器时导致Nginx起不来,又不能使用 docker exec ...的方式进入容器修改配置文件。

解决步骤

# 查看容器报错原因
[[email protected] nginx]# docker logs nginx
nginx: [emerg] unknown directive "gizp" in /etc/nginx/nginx.conf:29
# 在此目录找到nginx容器的配置文件
[[email protected] nginx]# cd /var/lib/docker/overlay2/
[[email protected] overlay2]# find ./ -name nginx.conf
./7baeb968df6b073708cce37a182cf54fd033023a5eda6bb6d1077438d950ce6e/diff/etc/nginx/nginx.conf
# 将文件修改正确
[[email protected] overlay2]# vim ./7baeb968df6b073708cce37a182cf54fd033023a5eda6bb6d1077438d950ce6e/diff/etc/nginx/nginx.conf
# 重启容器
[[email protected] overlay2]# docker restart nginx
nginx

问题解决。

Docker官方镜像修改制作,上传至自身Docker Hub仓库使用

Seichung阅读(1730)

本文章制作的镜像主要是在 Docker Hub 上拉取镜像,然后进行增加自身需要的软件等。最后上传到自己创建的 Docker Hub 仓库,最后再由其他机器进行下载验证。
从零开始制作镜像并上传至 Docker Hub 将会在后续文章中阐述。

以 MySQL 为例

一、从 Docker Hub 仓库拉取 MySQL 镜像

[[email protected] ] docker pull mysql:5.7.24
[[email protected] ] docker images
# 有如下显示就证明 MySQL 已经被成功拉取到本地了
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     5.7.24              ae6b78bedf88        5 weeks ago         372 MB

二、将容器的 3306 端口映射到宿主机的 3306 端口 、配置文件,日志文件,数据目录 等都映射到宿主机上

[[email protected] ] mkdir -p /data/mysql/conf /data/mysql/logs /data/mysql/data
[[email protected] ] cd /data/mysql
[[email protected] ] docker run -p 3306:3306 --name sc_mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs/:logs -v $PWD/data/:/mysql -e MYSQL_ROOT_PASSWORD="abc123" -itd f991c20cb508
[[email protected] ] docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS         PORTS                               NAMES
d8a39e9be192        ae6b78bedf88        "docker-entrypoint..."   14 minutes ago      Up 14 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   sc_mysql

可以看出,容器的 3306 端口已经映射到宿主机上了

[[email protected] ] netstat -antulp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      22689/docker-proxy-

三、进入容器,修改 mysql 配置文件

编者为了能够好的检验,后面拉取下来的镜像是否是自己上传的,所以在配置文件下增加 By Scong 字样,如图:

[[email protected] ] docker exec -it d8a39e9be192 bash
[email protected]:/# apt-get update 
[email protected]:/# apt-get install -y vim
[email protected]:/# vim /etc/mysql/mysql.conf.d/mysqld.cnf

docker

四、退出容器,将刚刚操作的镜像进行提交上传

[[email protected] ] docker commit -m="have changes" -a="skon" d8a39e9be192 skon2626/skon-hub:sc_mysql
    # -m:提交修改的信息
    # -a:维护人的信息
    # 紧接着的是之前的容器ID
    # skon/skon-hub:Docker Hub仓库,如果没有,默认为Docker的Docker Hub仓库
    # sc_mysql:tag标签

查看生成的镜像

[[email protected] ] docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
skon2626/skon-hub   sc_mysql            77cf957eee86        2 hours ago         419 MB
docker.io/mysql     5.7.24              ae6b78bedf88        5 weeks ago         372 MB

五、将创建的镜像上传到 自己的 Docker Hub 仓库,没有的读者可以前往注册。上传成功如下图:

[[email protected] ] docker login                               # 登陆Docker Hub仓库
[[email protected] ] docker push skon2626/skon-hub:sc_mysql     # 将镜像上传到自己的Docker Hub仓库

docker

六、从自己的 Docker Hub 仓库拉取自己制作的镜像

[[email protected] ] docker pull skon2626/skon-hub:sc_mysql
sc_mysql: Pulling from skon2626/skon-hub
a5a6f2f73cd8: Pull complete
936836019e67: Pull complete
283fa4c95fb4: Pull complete
1f212fb371f9: Pull complete
e2ae0d063e89: Pull complete
5ed0ae805b65: Pull complete
0283dc49ef4e: Pull complete
a7905d9fbbea: Pull complete
cd2a65837235: Pull complete
5f906b8da5fe: Pull complete
e81e51815567: Pull complete
e22f3dba163f: Pull complete
Digest: sha256:d75751ec13685b8c3ea18a92ebf8e8e1931e23c6f67d14e6825af214ad67f2f8
Status: Downloaded newer image for skon2626/skon-hub:sc_mysql

七、步骤同 二、三进行操作,检验效果如下图:

[[email protected] ] mkdir -p /data/mysql/conf /data/mysql/logs /data/mysql/data
[[email protected] ] cd /data/mysql
[[email protected] ] docker run -p 3306:3306 --name sc_mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs/:logs -v $PWD/data/:/mysql -e MYSQL_ROOT_PASSWORD="abc123" -itd 77cf957eee86
[[email protected] ] docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS         PORTS                               NAMES
e3ce90149d32        77cf957eee86        "docker-entrypoint.s…"   4 seconds ago       Up 3 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   sc_mysql

下载自身制作的镜像,并启动 mysql:

[[email protected] ] netstat -antulp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      4723/docker-proxy

进入容器

[[email protected] ] docker exec -it e3ce90149d32 bash

docker

从图中我们可以看出,vim 是可以直接使用的,如果不是自己制作的镜像,是会报-bash:vim :common not found 错误提示,而且也不会有文件末端的标识 # By Scong
所以,从简单的镜像修改制作,再上传到自己的 Docker Hub 仓库上,最后再 pull 拉取镜像测试验证,一次完整的镜像修改制作就完成了。同理,如果想增加一些其他服务,按照文章步骤一样也是可以打包镜像。

如果想完全自主地制作镜像,那么在下一篇文章,将会阐述利用Dockerfile完全自主地制作镜像

启动docker时映射到宿主机时出现 Error response from daemon: driver failed……的解决方案

Seichung阅读(8206)

启动 docker 映射到宿主机时出现如下错误时:

/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint sc_mysql (1bc03030afe9f722ae1e6b46166172a70cf87bcc3f02f0acdac0be2a7f0f0036): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.

这是由于来自守护进程的错误响应,而致使外部连接失败。解决的办法就是将其 docker 进程 kill 掉,然后再 清空掉iptables 下 nat 表下的所有链(规则) 。最后,将 docker 的网桥删除,并重启 docker 服务

[[email protected] ] pkill docker                        # 终止进程
[[email protected] ] iptables -t nat -F                  # 清空 nat 表的所有链
[[email protected] ] ifconfig docker0 down               # 停止 docker 默认网桥
[[email protected] ] yum install bridge-utils -y         # 部分机器是无法使用 brctl,所以需要提前安装
[[email protected] ] brctl delbr docker0                 # 删除网桥  
[[email protected] ] systemctl restart docker            # 重启docker

docker 镜像成功映射后,会在 iptables 上添加所属的链,如图:
docker

使用Docker搭建Zabbix服务

肓己阅读(2319)

前言

Zabbix官方提供有Docker镜像,本文结合资料记录一次使用Docker搭建Zabbix的过程,Docker、Zabbix的使用及介绍不再赘述。

##Docker源文件##
所有Zabbix组件都下列Docker源码库中提供:

  • Zabbix agent :
    zabbix/zabbix-agent

  • Zabbix server:
    Zabbix server(支持MySQL数据库)
    zabbix/zabbix-server-mysql
    Zabbix server(支持PostgreSQL数据库):
    zabbix/zabbix-server-pgsql

  • Zabbix web接口:
    基于Apache2 web服务器及支持MySQL数据库的Zabbix web接口
    zabbix/zabbix-web-apache-mysql
    基于Nginx web服务器及支持MySQL数据库的Zabbix web接口
    zabbix/zabbix-web-nginx-mysql
    基于Nginx web服务器及支持PostgreSQL数据库的Zabbix web接口
    zabbix/zabbix-web-nginx-pgsql

  • Zabbix proxy:
    Zabbix proxy(支持SQLite3数据库)
    zabbix/zabbix-proxy-sqlite3
    Zabbix proxy(支持MySQL数据库)
    zabbix/zabbix-proxy-mysql
    Zabbix Java Gateway - zabbix/zabbix-java-gateway

另外,对于SNMP trap的支持,这里只基于Ubuntu Trusty提供额外的源代码库(zabbix/zabbix-snmptraps)。 这可以关联Zabbix server和Zabbix proxy使用。

本文作者使用的镜像有:

mysql:5.7
zabbix/zabbix-java-gateway:latest
zabbix/zabbix-server-mysql:latest
zabbix/zabbix-web-nginx-mysql:latest

##过程##
1、安装Docker镜像

➜  ~ docker pull mysql:5.7
➜  ~ docker pull zabbix/zabbix-java-gateway:latest
➜  ~ docker pull zabbix/zabbix-server-mysql:latest
➜  ~ docker pull zabbix/zabbix-web-nginx-mysql:latest

2、启动一个空的MySQL服务器实例

➜  ~ docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -d mysql:5.7

3、启动Zabbix Java gateway实例

➜  ~ docker run --name zabbix-java-gateway -t \
      -d zabbix/zabbix-java-gateway:latest

4、启动Zabbix server实例,并关联这个实例到已创建的MySQL服务器实例

➜  ~ docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --link mysql-server:mysql \
      --link zabbix-java-gateway:zabbix-java-gateway \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:latest

5、启动Zabbix web 接口,并将它与MySQL服务器实例和Zabbix server实例关联

➜  ~ docker run --name zabbix-web-nginx-mysql -t \
    -e DB_SERVER_HOST="mysql-server" \
    -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest

在使用上面命令运行容器时注意容器之间是相关联的,数据库密码要与之对应,不然会连接不了数据库。

7、浏览器访问http://127.0.0.1,进入Zabbix服务web界面,刚进入是会显示一个Database Error:

稍等一会,初始化完成就会自动进入登录界面:

键入初始帐号Admin密码zabbix,即可登录进去监控页面:

至此,使用Docker搭建Zabbix服务完成,实现「秒起」Zabbix服务。

结尾

对此虽已实现Docker启动Zabbix服务,但对于Zabbix镜像的一些使用还处在一知半解的水平,如对Zabbix镜像zabbix-agent、数据持久化、以及镜像允许使用的挂载点的相关操作等,在日后的学习使用中继续对相关博文进行更新。
感兴趣的朋友可以查看官方文件进行深入的学习和使用。
中文文档地址:
https://www.zabbix.com/documentation/3.4/zh/manual

谢谢浏览,祝您生活愉快。