全栈工程师开发手册 (作者:栾鹏)
架构系列文章


docker安装mysql

docker search mysql         搜索
docker pull mysql:5.6       下载
docker images |grep mysql   查看
docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin -d mysql:5.7   运行

命令说明:

-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。

-v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。

-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。

-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。


docker ps   查看镜像的运行


运行后进入容器进行初始化
# mysql -u root -p
# create database note;

docker安装redis

docker search  redis     搜索
docker pull  redis:3.2   下载
docker images redis      查看
docker run -p 6379:6379 -v $PWD/data:/data  -d redis:3.2 redis-server --appendonly yes    运行

命令说明:

-p 6379:6379 : 将容器的6379端口映射到主机的6379端口

-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data

redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置


docker ps   查看运行情况

docker 安装postgres

docker run --name postgres1 -e POSTGRES_PASSWORD=admin -p 5432:5432 -d postgres:latest

解释:
run,创建并运行一个容器;
--name,指定创建的容器的名字;
-e POSTGRES_PASSWORD=admin,设置环境变量,指定数据库的登录密码为admin;
-p 54321:5432,端口映射将容器的5432端口映射到外部机器的54321端口;
-d postgres:latest,指定使用postgres:latest作为镜像。

注意:
postgres镜像默认的用户名为postgres,
登陆密码为创建容器是指定的值。

docker 部署 rancher

官网参考:https://www.cnrancher.com/docs/rancher/v2.x/cn/installation/server-installation/single-node-install/

docker run -d --restart=unless-stopped -p 8001:80 -p 8002:443 -v /root/var/log/auditlog:/var/log/auditlog -e AUDIT_LEVEL=3 rancher/rancher:latest

在登录界面记得选择语言,使用汉化版的rancher

若要将k8s添加到rancher中,需要执行一个命令,这个在rancher中有提示。

docker 部署Portainer

Portainer为docker容器管理组件。

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

然后在pc上访问127.0.0.1:9000就可以。进入后会让你添加docker的endpoint。先添加一个local的。就可以看到本地的容器和镜像了。

添加远程服务器的docker管理

在服务器上执行下面的命令。

记得将下面的HOST换成你自己的docker主机的hostname,不要通过设置变量实现。

生成CA公钥和私钥:
openssl genrsa -aes256 -out ca-key.pem 4096   # 生成CA私钥,会让你设置密码,记住你设置的密码
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem    #生成CA公钥,也就是证书   输入上面的密码,以及国家组织等信息,

其中Common Name要设置成hostname
Common Name (e.g. server FQDN or YOUR name) []:$HOST

现在我们有了CA,就可以创建服务器私钥和证书请求文件了
openssl genrsa -out server-key.pem 4096       # 生成服务器私钥

openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr  # 用私钥生成证书请求文件

现在,我们可以用CA来签署证书了。这里我们可以填写IP地址或则DNS name,如,我们需要允许服务器外网ip和服务器内网ip   172.16.0.230和127.0.0.1连接:
echo subjectAltName =IP:139.159.206.232,IP:172.16.0.230,IP:127.0.0.1 > extfile.cnf

# 将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证:
$ echo extendedKeyUsage = serverAuth >> extfile.cnf
$ openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem  -CAcreateserial -out server-cert.pem -extfile extfile.cnf

在服务器上生成客户端证书:

$ openssl genrsa -out key.pem 4096      # 客户端私钥
$ openssl req -subj '/CN=client' -new -key key.pem -out client.csr      # 客户端证书请求文件

用CA为客户端签署证书文件:

# 要使密钥适配客户端身份验证,请创建扩展配置文件:
$ echo extendedKeyUsage = clientAuth >> extfile.cnf

$ openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf

删除证书请求文件:

$ rm -v client.csr server.csr
默认的私钥权限太开放了,为了更加的安全,我们需要更改证书的权限,删除写入权限,限制阅读权限(只有你能查看):

$ chmod -v 0400 ca-key.pem key.pem server-key.pem
证书文件删除其写入权限:

$ chmod -v 0444 ca.pem server-cert.pem cert.pem

证书的部署:

我这里是ubunu系统

sudo vi /etc/default/docker
    如:DOCKER_OPTS="-D --tlsverify=true --tlscert=/var/docker/server-cert.pem --tlskey=/var/docker/server-key.pem --tlscacert=/var/docker/ca.pem  
    -H tcp://0.0.0.0:2376"
$ sudo service docker restart

下面使用客户端链接,需要

将ca.pem、cert.pem、key.pem文件下载到本地。
docker --tlsverify --tlscacert=./ca.pem \
  --tlscert=./cert.pem \
  --tlskey=./key.pem \
  -H=139.159.206.232:2376 version

可以在endpoint页面,创建一个入口点,设置url为139.159.206.232:2376,并添加ca.pem、cert.pem、key.pem三个文件。

参考:https://docs.docker.com/engine/security/https/#secure-by-default

docker 部署蝉道

docker run --name zentao -it --restart always -v /home/lp/docker/zentao/zbox:/opt/zbox -p 11111:80 haha123/zentao

docker安装常用组件(mysql,redis,postgres,rancher,Portainer,蝉道,JIRA,sonarqube,Confluence,pgadmin4,harbor)_redis

账号密码: admin/123456

进入后会提醒修改账号密码

docker 安装JIRA

1.pull docker 镜像: jira:latest(目前的最新版本) mysql:5.7
版本信息可以参考:https://hub.docker.com/r/cptactionhank/atlassian-jira-software/tags

docker pull cptactionhank/atlassian-jira-software
docker pull mysql:5.7

2.启动mysql docker实例

docker run --name atlassian-mysql --restart always -p 3306:3306 -v /opt/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 #记得修改passwd

3.连接mysql

docker run -it --link atlassian-mysql:mysql --rm mysql:5.7 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

4.创建jira数据库,并添加jira用户 【mysql操作台执行】

create database jira default character set utf8 collate utf8_bin;
CREATE USER `jira`@`%` IDENTIFIED BY 'jira';GRANT ALL ON *.* TO `jira`@`%` WITH GRANT OPTION;
alter user 'jira'@'%' identified with mysql_native_password by 'jira';

5.修改mysql事物隔离级别 【mysql操作台执行】

set global transaction isolation level read committed;
set session transaction isolation level read committed;

6.启动jira实例

docker run --detach --restart always -v /data/atlassian/confluence:/home --publish 8080:8080 cptactionhank/atlassian-jira-software

7.访问:192.168.x.x:8080 进行jira配置。配置过程略。配置完成如下图:

http://192.168.x.x:8080/secure/WelcomeToJIRA.jspa

sonarqube

部署服务端

docker run --name sonar -e SONARQUBE_JDBC_USERNAME=root -e SONARQUBE_JDBC_PASSWORD=admin -e SONARQUBE_JDBC_URL='jdbc:mysql://192.168.11.127:30369/sonar?useUnicode=true&characterEncoding=utf8' -p 9000:9000 sonarqube:6.7.5

第一次登录会让设置账户,进而生成一个token,这个token是客户端访问的凭证。

docker安装常用组件(mysql,redis,postgres,rancher,Portainer,蝉道,JIRA,sonarqube,Confluence,pgadmin4,harbor)_redis_02


下载sonar-scanner :http://redirect.sonarsource.com/doc/install-configure-scanner.html

在项目文件夹下执行

sonar-scanner   -Dsonar.projectKey=test   -Dsonar.sources=.   -Dsonar.host.url=http://127.0.0.1:9000   -Dsonar.login=6a14734cf871e3ed2d694bbb71dc8fd0b9193d8b

其中Dsonar.host.url为服务端地址,Dsonar.login为登录生成的token,这样就能在客户端检查代码,将结果发送到服务端了

安装Confluence

持久化可是使用mysql或者postgresql

docker run -d --name confluence -p 8090:8090  --link mysql5.7:db --user root:root cptactionhank/atlassian-confluence:latest
docker run -d --name confluence -p 8090:8090  --link postgresql:db --user root:root cptactionhank/atlassian-confluence:latest

安装pgadmin4

docker run --name pgadmin -e "PGADMIN_DEFAULT_EMAIL=user@domain.com" -e "PGADMIN_DEFAULT_PASSWORD=admin" -p 80:80 -p 443:443  -d dpage/pgadmin4

安装harbor,构建私有仓库

下载地址:https://github.com/goharbor/harbor/releases,安装harbor需要先安装docker-compose。

下载 harbor-offline-installer-v1.10.0.tgz

wget https://github.com/goharbor/harbor/releases/download/v1.10.0/harbor-offline-installer-v1.10.0.tgz
tar -xvf harbor-offline-installer-v1.10.0.tgz
cd harbor

vim harbor.yml
配置harbor配置文件:

hostname = 192.168.0.104,不能配置localhost、127.0.0.1
harbor_admin_password = Harbor12345        harbor登陆密码

certificate: /etc/certs/ca.crt
private_key: /etc/certs/ca.key

# 创建自定义签名证书
mkdir /etc/certs
openssl genrsa -out /etc/certs/ca.key 2048
openssl req -x509 -new -nodes -key /etc/certs/ca.key -subj "/CN=192.168.0.104" -days 5000 -out /etc/certs/ca.crt

./install.sh

安装完成之后
ddocker-compose ps

启动Harbor
# docker-compose start
停止Harbor
# docker-comose stop
重启Harbor
# docker-compose restart

默认账号密码: admin / Harbor12345 登录后修改密码
执行docker login 192.168.0.104
输入用户名admin/Harbor12345
Login Succeeded #显示此字段说明登录成功可以上传下载镜像

可以使用https或者http,建议选择https

(5)客户端配置
客户端需要创建证书文件存放的位置,并且把服务端创建的证书拷贝到该目录下,然后重启客户端docker

$ mkdir -p /etc/docker/certs.d/192.168.38.23

把服务端crt证书文件拷贝到客户端,这里的客户端为192.168.38.21

$ scp /etc/certs/ca.crt root@192.168.38.21:/etc/docker/certs.d/192.168.38.23/

重启客户端docker

$ systemctl restart docker

部署nginx

docker run  --name nginx  -d -p 6800:80   -v /usr/docker/nginx/html:/usr/share/nginx/html -v /etc/docker/myNginx/nginx.conf:/etc/nginx/nginx.conf -v /etc/docker/myNginx/conf.d:/etc/nginx/conf.d  nginx:latest