以下是docker 相关环境安装部署集合,记录一下方便使用!
提示:以下是本篇文章正文内容,下面案例可供参考
yum update
yum -y install chrony
systemctl enable chronyd
timedatectl set-timezone Asia/Shanghai
date
视情况是否关闭
1、命令行界面输入命令“systemctl status firewalld.service”并按下回车键。
systemctl status firewalld.service
2、然后在下方可度以查看得到“active(running)”,此时说明防火墙已经被打开了。
3、在命令行中输入systemctl stop firewalld.service命令,进行关闭防火墙。
systemctl stop firewalld.service
注意:需要root权限才能关闭
4、然后再使用命令systemctl status firewalld.service,在下方出现disavtive(dead),这样就说明防火墙已经关闭。
systemctl status firewalld.service
5、再在命令行中输入命令“systemctl disable firewalld.service”命令,即可永久关闭防火墙。
systemctl disable firewalld.service
/etc/systemd/logind.conf,使用vim命令打开
vim /etc/systemd/logind.conf
配置文件中找到我们要修改的配置项:
我们把HandleLidSwitch后面的suspend修改为lock,
HandleLidSwitch=lock
ignore 忽略,跳过
power off 关机
eboot 重启
halt 挂起
suspend shell内建指令,可暂停目前正在执行的shell。若要恢复,则必须使用SIGCONT信息。所有的进程都会暂停,但不是消失(halt是进程关闭)
lock 仅锁屏,计算机继续工作。
必须要使用如下命令才能使上面的配置生效
systemctl restart systemd-logind
修改网卡配置文件
有线
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="66af7510-3056-4481-a417-dde76aa9c711"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.1.11"
PREFIX="32"
GATEWAY="192.168.1.1"
DNS1="192.168.1.1"
重启网络服务,执行命令:
sudo service network restart
或
/etc/init.d/network restart
vim /etc/init.d/proxy-client
#!/bin/bash
#chkconfig: 2345 22 80
#description: proxy client Service
/data/proxy-client-0.1/bin/startup.sh >/dev/null 2>/dev/null
#!/bin/bash #告诉系统使用的shell;
#chkconfig: 2345 22 80
#chkconfig后面有三个参数2345,20和80告诉chkconfig程序,需要在rc2.d~rc5.d目录下,创建名字为 S20FIlebeat的文件连接,连接到/etc/rc.d/init.d目录下的的FIlebeat脚本。第一个字符是S,系统在启动的时候,运行脚本FIlebeat,就会添加一个start参数,告诉脚本,现在是启动模式。同时在rc0.d和rc6.d目录下,创建名字为K80FIlebeat的 文件连接,第一个字符为K,个系统在关闭系统的时候,会运行FIlebeat,添加一个stop,告诉脚本,现在是关闭模式。注意上面的三行中,第二,第三行是必须的,否则在运行chkconfig --add FIlebeat时,会报错。 如果运行chkconfig老是报错,如果脚本没有问题,建议直接在rc0.d~rc6.d下面创建到脚本的文件连接来解决,原理都是一样的。
chmod +x /etc/init.d/proxy-client
chkconfig --add proxy-client
sudo reboot
[root@c69-01 ~]# chkconfig proxy-client off
[root@c69-01 ~]# chkconfig --list proxy-client 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@c69-01 ~]# chkconfig --list proxy-client 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@c69-01 ~]# chkconfig --del proxy-client
[root@c69-01 ~]# chkconfig --list testservice test supports chkconfig, but is not referenced in any runlevel (run 'chkconfig --add proxy-client ')
sudo yum install java-1.8.0-openjdk-devel.x86_64 -y
sudo yum install java-11-openjdk-devel.x86_64
update-alternatives --config java
之前使用的CentOS8由于停止维护了,这意味着无法再使用新版本的软件包更新了,由于Docker 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。希望这篇文章对大家能有帮助。
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月)
EE 即企业版,强调安全,付费使用,支持周期 24 个月。
Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境下的安装指南,这里主要介绍
Docker CE 在 CentOS上的安装。
如果之前安装过旧版本的Docker,可以使用下面命令卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
更新本地镜像源:官方
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
刷新 yum 缓存
sudo yum makecache fast
安装docker
sudo yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
##创建文件夹
sudo mkdir -p /etc/docker
##在文件夹内新建一个daemon.json文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://3n4m4jry.mirror.aliyuncs.com"]
}
EOF
##重新加载文件
sudo systemctl daemon-reload
##重启docker
sudo systemctl restart docker
一些镜像的基础命令,方便学习,可以去dockerhub上拉取镜像https://hub.docker.com/
docker search tomcat # 从Docker Hub上查找tomcat镜像
STARS: # 关注度
docker search --filter=stars=300 tomcat #从Docker Hub上查找关注度大于300的tomcat镜像
docker images
docker images -a #列出本地所有的镜像
docker images -q #只显示镜像ID
docker images --digests #显示镜像的摘要信息
docker images --no-trunc #显示完整的镜像信息
不加tag(版本号) 即拉取docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本
docker pull 镜像名
docker pull 镜像名:tag
docker save 镜像名/镜像ID -o 镜像保存的名字 镜像保存的tag
例如:docker save -o redis.tar redis:latest
docker rmi -f 镜像名/镜像ID
#单个镜像删除,相当于:docker rmi java:latest
docker rmi java
#强制删除(删除正在运行的镜像,注:以后台方式运行的不能被强制删除)
docker rmi -f java
#多个镜像删除,不同镜像间以空格间隔
docker rmi -f java tomcat nginx
#删除本地全部镜像
docker rmi -f $(docker images -q)
docker load -i 镜像保存文件位置
例如:docker load -i redis.tar
# 查看正在运行的容器
docker ps
# 查看所有容 包括停止的容器
docker ps -a
# -q参数,只显示container id
docker ps -q
# 查看容器详细信息
docker inspect demo1
#新建并启动容器,参数:-i 以交互模式运行容器;-t 为容器重新分配一个伪输入终端;--name 为容器指定一个名称
docker run -i -t --name mycentos 镜像名称/镜像ID
#后台启动容器,参数:-d 已守护方式启动容器
docker run -d mycentos
#启动止容器
docker start 容器id
# 重启容器
docker restart 容器id
# 关闭容器
docker kill 容器id
docker stop 容器id
-t 参数让Docker分配一个伪终端并绑定到容器的标准输入上
-i 参数则让容器的标准输入保持打开。
-c 参数用于给运行的容器分配cpu的shares值
-m 参数用于限制为容器的内存信息,以 B、K、M、G 为单位
-v 参数用于挂载一个volume,可以用多个-v参数同时挂载多个volume
-p 参数用于将容器的端口暴露给宿主机端口 格式:host_port:container_port 或者 host_ip:host_port:container_port
--name 容器名称
--net 容器使用的网络
-d 创建一个后台运行容器
# 容器内存等占用查看
docker stats
#使用run方式在创建时进入
docker run -it centos /bin/bash
#关闭容器并退出
exit
#仅退出容器,不关闭
快捷键:Ctrl + P + Q
快捷键:Ctrl + Shift + P + Q
#top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
#列出redis容器中运行进程
docker top tomcat
#查看所有运行容器的进程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
# 查看redis容器日志,默认参数
docker logs tomcat
# 查看redis容器日志,参数:-f 跟踪日志输出;-t 显示时间戳;--tail 仅列出最新N条容器日志;
docker logs -f -t --tail=20 redis
# 查看容器redis从2021年08月10日后的最新10条日志。
docker logs --since="2021-08-10" --tail=10 redis
# f361b7d8465 为 容器ID
docker update --cpu-shares 512 f361b7d8465
docker update --restart=always f361b7d8465
docker update --restart=no f361b7d8465
docker update -m 500M f361b7d8465
Docker容器的重启策略如下:
no,默认策略,在容器退出时不重启容器
on-failure,在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3,在容器非正常退出时重启容器,最多重启3次
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
名称 | 描述 |
---|---|
--blkio-weight |
阻塞IO (相对权重),介于10到1000之间,0表示禁用(默认禁止) |
--cpu-period |
限制CPU CFS(完全公平的调度程序)期限 |
--cpu-quota |
限制CPU CFS(完全公平的调度程序)配额 |
--cpu-rt-period |
API 1.25+ ,将CPU实时时间限制为微秒 |
--cpu-rt-runtime |
API 1.25+ ,将CPU实时运行时间限制为微秒 |
--cpu-shares , -c |
CPU份额(相对权重) |
--cpus |
API 1.29+ ,CPU数量 |
--cpuset-cpus |
允许执行的CPU(0-3,0,1) |
--cpuset-mem |
允许执行的MEM(0-3,0,1) |
--kernel-memory |
内核内存限制 |
--memory-swap |
交换限制等于内存加交换,“-1”以启用无限交换 |
--memory-reservatio |
内存软限制 |
--memory , -m |
内存限制 |
--pids-limit |
API 1.40+ ,调节容器pids限制(-1表示无限制) |
--restart |
容器退出时重新启动策略以应用 |
Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
compose文件格式版本 docker版本
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1.+
两种最新的docker安装方式
1.从github上下载docker-compose二进制文件安装
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
2.pip安装
sudo pip install docker-compose
docker pull portainer/portainer
docker run -p 9000:9000 -p 8000:8000 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /mydata/portainer/data:/data \
-d portainer/portainer
第一次登录的时候需要创建管理员账号,访问地址:http://192.168.1.101:9000/
Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务 。
访问 Nginx 镜像库地址: https://hub.docker.com/_/nginx?tab=tags。
这里我们拉取官方的最新版本的镜像:
docker pull nginx:latest
使用以下命令来查看是否已安装了 nginx:
docker images
mkdir -p /data/nginx/www /data/nginx/logs /data/nginx/conf
touch /data/nginx/conf/nginx.conf
user root;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_max_body_size 100m;
proxy_buffering off;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name _;
rewrite ^(.*)\#(.*)$ $1#$2 redirect;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
}
安装完成后,我们可以使用以下命令来运行 nginx 容器:
docker run -d -p 80:80 --name nginx \
--restart=always \
-v /data/nginx/www:/usr/share/nginx/html \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/logs:/var/log/nginx \
nginx
参数说明:
使用多端口映射443端口,以及ssl 文件
docker run -d -p 80:80 -p 443:443 --name nginx \
--restart=always \
-v /data/nginx/www:/usr/share/nginx/html \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/conf/xx.xxxx.com.pem:/etc/nginx/xxxxx.com.pem \
-v /data/nginx/conf/xx.xxxx.com.key:/etc/nginx/xxxxx.com.key \
-v /data/nginx/logs:/var/log/nginx \
nginx
nginx.conf 新增443 端口监听
#http节点中可以添加多个server节点
server{
#监听443端口
listen 443 ssl;
#对应的域名,把xxxxxxx.com改成你们自己的域名就可以了
server_name xxxxxxx.com;
ssl on;
ssl_certificate /etc/nginx/xxxxx.com.pem;
ssl_certificate_key /etc/nginx/xxxxx.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /api {
proxy_pass http://10.2.0.5:9091;
root /usr/share/nginx/html;
index index.html index.htm;
}
location /admin {
proxy_pass http:/10.2.0.5:9090;
root /usr/share/nginx/html;
index index.html index.htm;
}
}
tcp 负载
#nginx tcp loadbalance config
stream {
upstream MyServer{
#hash $remote_addr consistent;
server 127.0.0.1:6000 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:6002 weight=1 max_fails=3 fail_timeout=30s;
}
server {
proxy_connect_timeout 1s;
#proxy_timeout 3s;
listen 8000;
proxy_pass MyServer;
tcp_nodelay on;
}
}
http 负载
upstream pptbackend {
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
server {
listen 80;
server_name localhost;
location /ppt/ {
proxy_pass http://pptbackend;
index index.html index.htm index.jsp;
}
}
docker search redis
docker pull redis
1)、挂载redis的配置文件
2)、挂载redis 的持久化文件(为了数据的持久化)。
mkdir -p /data/redis/conf /data/redis/data
docker run --restart=always \
-p 6379:6379 --name redis \
-v /data/redis/data:/data \
-d redis redis-server \
--requirepass "123456" \
--appendonly yes
指定redis.conf 文件启动
docker run --restart=always \
--log-opt max-size=100m \
--log-opt max-file=2 \
-p 6379:6379 --name redis \
-v /data/redis/conf/:/etc/redis/redis.conf \
-v /data/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf \
--requirepass "123456" \
--appendonly yes
通过docker ps指令查看启动状态
docker ps
查看容器运行日志
## 当前日志
docker logs -f redis
##30分钟之内的日志情况。
docker logs --since 30m myredis
redis.conf
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#bind 127.0.0.1
protected-mode no
port 6379
tcp-backlog 511
requirepass 000415
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
docker hub镜像仓库中为我们开发要
打开docker hub 网站
dockerHub官网地址
不指定版本号,默认下载最新版本:
docker pull mysql:8.0.31-debian
指定版本号:
docker pull mysql:5.7.40
1)、挂载mysql的配置文件
2)、挂载mysql的数据文件
mkdir -p /data/mysql/conf/ /data/mysql/logs /data/mysql/data
[mysqld]
user=mysql
default-authentication-plugin=mysql_native_password
# 表示允许任何主机登陆MySQL
bind-address=0.0.0.0
default-storage-engine=INNODB
character-set-server=utf8mb4
# 导入文件限制
max_allowed_packet=1024M
# 8.0版本自适应参数【很重要的配置】
innodb_dedicated_server=on
lower_case_table_names = 1
default-time-zone='+08:00'
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
docker run -p 3306:3306 --name mysql \
--restart=always \
-v /data/mysql/conf:/etc/mysql/conf.d \
-v /data/mysql/logs:/logs \
-v /data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
docker run -p 3306:3306 --name mysql -v /home/mysql/conf:/home/mysql/conf.d -v /home/mysql/logs:/logs -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker exec -it mysql /bin/bash
mysql -r -p123456
use mysql
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
exit
exit
#!/bin/bash
#用户名
USER="root"
#密码
PASSWORD="123456"
#数据库名
DATABASE="test
> 这里是引用
"
#docker 镜像名
DOCKERNAME="mysql"
BACKUP_DIR=/data/bakmysql/db/ #备份文件存储路径
LOGFILE=/data/bakmysql/db/data_backup.log #日记文件路径
DATE=`date '+%Y%m%d-%H%M'` #日期格式(作为文件名)
DUMPFILE='cradmin'-$DATE.sql #备份文件名
ARCHIVE='cradmin'-$DATE.sql.tgz #压缩文件名
OPTIONS="-u$USER -p$PASSWORD $DATABASE"
#mysqldump -help
#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ] ;
then
mkdir -p "$BACKUP_DIR"
fi
#开始备份之前,将备份信息头写入日记文件
echo " " >> $LOGFILE
echo " " >> $LOGFILE
echo "———————————————–" >> $LOGFILE
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE
echo "———————————————– " >> $LOGFILE
#切换至备份目录
cd $BACKUP_DIR
#使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件
docker exec -ti $DOCKERNAME mysqldump $OPTIONS > $DUMPFILE
#判断数据库备份是否成功
if [[ $? == 0 ]]; then
#创建备份文件的压缩包
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
#输入备份成功的消息到日记文件
echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE
#删除原始备份文件,只需保 留数据库备份文件的压缩包即可
rm -f $DUMPFILE
else
echo "Database Backup Fail!" >> $LOGFILE
fi
#备份最近5天的数据 -mtime +5 按照文件的更改时间来查找文件,+5表示文件更改时间距现在5天以前;如果是 -mmin +5 表示文件更改时间距现在5分钟以前。
find ${BACKUP_DIR} -mtime +5 -name "cradmin-*.sql.tgz" -exec rm -f {} \;
#输出备份过程结束的提醒消息
echo "Backup Process Done"
crontab -e
0 0 1 * * ? /bin/sh /data/bakmysql/bakmysql.sh
crontab -l
下载一个nexus3的镜像:
docker pull sonatype/nexus3
挂载Nexus的数据文件
mkdir /data/nexus-data && chown -R 200 /data/nexus-data
使用nexus3镜像创建并启动一个容器,指定暴露8081端口到对应主机的8081端口,将容器内部/var/nexus-data挂载到主机/data/nexus-data目录。
docker run -d -p 8081:8081 --name nexus -v /data/nexus-data:/nexus-data --restart=always sonatype/nexus3
在浏览器输入:http://ip:8081访问
Nexus3的初始账号密码已经不是admin/admin123。
密码保存在 /nexus-data下的 admin.password 中
进入容器
docker exec -it nexus /bin/bash
进入容器后,找到admin.password ,查看并复制密码。
cat nexus-data/admin.password
登陆,输入密码,直接 next,提示重置密码
添加阿里云公共仓库
maven-aliyun 阿里
http://maven.maven-aliyun.com/nexus/content/groups/public/
repo1
http://repo1.maven.org/maven2/
apache
http://repo.maven.apache.org/maven2
将阿里云公共仓库添加到maven这个group类型的仓库,并调整优先级
http://192.168.44.8:8081/repository/maven-public/
maven配置私服有两种方式
需要项目中使用jar 的配置过程: 先要引入jar包,然后需要在 setting.xml或者pom.xml文件中添加资源地址.
maven的配置文件 setting.xml
<mirror>
<id>maven-publicid>
<mirrorOf>*mirrorOf>
<url>http://192.168.153.8:8081/repository/maven-public/url>
mirror>
<mirror>
<id>alimavenid>
<mirrorOf>centralmirrorOf>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/repositories/central/url>
mirror>
<mirror>
<id>repo1id>
<mirrorOf>centralmirrorOf>
<name>Human Readable Name for this Mirror.name>
<url>http://repo1.maven.org/maven2/url>
mirror>
<mirror>
<id>repo2id>
<mirrorOf>centralmirrorOf>
<name>Human Readable Name for this Mirror.name>
<url>http://repo2.maven.org/maven2/url>
mirror>
项目中的pom.xml
#### 使用nexus私服
<repositories>
<repository>
<id>nexusid>
<name>nexusname>
<url>http://192.168.44.8:8081/repository/maven-public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>nexusid>
<name>my-nexus-repositoryname>
<url>http://192.168.153.8:8081/repository/maven-public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>falseenabled>
snapshots>
pluginRepository>
pluginRepositories>
#### 使用阿里云
<repositories>
<repository>
<id>publicid>
<name>aliyun nexusname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<releases>
<enabled>trueenabled>
releases>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>publicid>
<name>aliyun nexusname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>falseenabled>
snapshots>
pluginRepository>
pluginRepositories>
本地jar上传到私服,有两种方式,一种是maven客户端配置,deploy上传;一种是在管理后台手动上传。下面分别介绍这两种方法。
在servers 标签中添加配置
nexus-releases
admin
admin123
nexus-snapshots
admin
admin123
需要在 pom文件中配置加入
nexus-releases
http://192.168.44.8:8081/repository/maven-releases/
nexus-snapshots
http://192.168.44.8:8081/repository/maven-snapshots/
true
进入上传页面进行上传操作
docker pull nacos/nacos-server
mkdir -p /data/nacos/logs/ #新建logs目录
mkdir -p /data/nacos/conf/ #新建配置文件
vi /data/nacos/conf/application.properties #修改配置文件
application.properties
# spring
server.servlet.contextPath=/nacos
server.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=1
db.url.0=jdbc:mysql://192.168.1.101:3306/nacos?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&allowPublicKeyRetrieval=true&serverTimezone=UTC
db.user=root
db.password=123456
### The auth system to use, currently only 'nacos' is supported:
nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.default.token.expire.seconds=18000
### The default token:
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=false
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
server.tomcat.accesslog.enabled=false
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D
# default current work dir
server.tomcat.basedir=
## spring security config
### turn off security
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
docker run -d -p 8848:8848 \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /data/nacos/logs:/home/nacos/logs \
-v /data/nacos/conf/application.properties:/home/nacos/conf/application.properties \
--restart=always \
--name nacos nacos/nacos-server
docker run -d --name nacos1 --hostname nacos1 \
--net=host \
--restart=always \
--add-host nacos1:172.16.9.45 \
--add-host nacos2:172.16.9.46 \
--add-host nacos3:172.16.9.47 \
-e PREFER_HOST_MODE=hostname \
-e MYSQL_SERVICE_HOST=172.16.9.45 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=asdw@123 \
-e MYSQL_SERVICE_PORT=3306 \
-e NACOS_SERVERS="nacos1:8848 nacos2:8848 nacos3:8848" \
-v /root/nacos/config/custom.properties:/home/nacos/init.d/custom.properties \
-v /root/nacos/logs:/home/nacos/logs \
nacos/nacos-server
这里重点解释一下 --net=host,这里是采用docker的主机模式,也就是无网桥,直接占用本机的端口。网上很多人的例子都是在一台机子下面做多个不同端口的nacos,来模拟伪集群,所以很多人都是-p 8848:8848就OK了。而在不同机子上时,nacos其实不仅仅使用到了8848端口,还用了其他一些端口,比如7848等。所以,要么你就要暴露所有的端口,要么简单点直接使用–net=host即可
Nginx做高可用负载,nginx.conf的配置修改
在最后一行添加,也就是和http同级
stream {
upstream nacos {
server 172.16.9.45:8848;
server 172.16.9.46:8848;
server 172.16.9.47:8848;
}
server {
listen 8848;
proxy_pass nacos;
}
}
http://192.168.44.8:8848/nacos/#/login
用户:nacos/nacos
docker pull rabbitmq
docker run -d \
-p 15672:15672 \
-p 5672:5672 \
-e RABBITMQ_DEFAULT_VHOST=/ \
-e RABBITMQ_DEFAULT_USER=guest \
-e RABBITMQ_DEFAULT_PASS=guest \
--hostname myRabbit \
--name rabbitmq \
--restart=always \
rabbitmq
参数说明:
-restart=always:开机自启
-d:表示在后台运行容器
-p:将容器的端口 5672(应用访问端口)和 15672 (控制台Web端口号)映射到主机中
-e:指定环境变量
RABBITMQ_DEFAULT_VHOST:默认虚拟机名
RABBITMQ_DEFAULT_USER:默认的用户名
RABBITMQ_DEFAULT_PASS:默认的用户密码
–hostname:指定主机名(RabbitMQ 的一个重要注意事项是它根据所谓的 节点名称 存储数据,默认为主机名)
–name rabbitmq:设置容器名称; rabbitmq:容器使用的镜像名称
方法一:
1)、先进入rabbitmq容器
docker exec -it rabbitmq /bin/bash
2)、再执行命令
rabbitmq-plugins enable rabbitmq_management
方法二:
docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management
http://192.168.44.8:15672/#/queues
登陆后 Queues -> Add a new queue -> Durability: Durable 持久数据, Transient 临时数据
linux 部署 rabbitmq后,打开rabbitmq管理界面。点击channels,会报错
Stats in management UI are disabled on this node
#进入rabbitmq容器
docker exec -it {rabbitmq容器名称或者id} /bin/bash
#进入容器后,cd到以下路径
cd /etc/rabbitmq/conf.d/
#修改 management_agent.disable_metrics_collector = false
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
#退出容器
exit
#重启rabbitmq容器
docker retart {rabbitmq容器id}
因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:
docker network create es-net
查看网络列表
docker network ls
这里我们采用elasticsearch的:7.9.3版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。
如果已有镜像包,直接load
docker load -i 文件
无镜像包,pull
docker search elasticsearch:7.9.3
docker pull elasticsearch:7.9.3
mkdir -p /data/elasticsearch/config
mkdir -p /data/elasticsearch/data
mkdir -p /data/elasticsearch/logs
mkdir -p /data/elasticsearch/plugins
elasticsearch.yml 文件
# 可访问IP
http.host: 0.0.0.0
# 跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
# 安全功能
xpack.security.enabled: false
在宿主机宿主机文件夹给予权限
sudo chown -R 1000:1000 /data/elasticsearch
docker run -d --restart=always --name es \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.9.3
命令解释:
-e "cluster.name=es-docker-cluster"
:设置集群名称-e "http.host=0.0.0.0"
:监听的地址,可以外网访问-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:内存大小-e "discovery.type=single-node"
:非集群模式-v es-data:/usr/share/elasticsearch/data
:挂载逻辑卷,绑定es的数据目录-v es-logs:/usr/share/elasticsearch/logs
:挂载逻辑卷,绑定es的日志目录-v es-plugins:/usr/share/elasticsearch/plugins
:挂载逻辑卷,绑定es的插件目录--privileged
:授予逻辑卷访问权--network es-net
:加入一个名为es-net的网络中-p 9200:9200
:端口映射配置http://192.168.44.8:9200/
如下显示则成功:
{
"name" : "793680b1ef20",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "nvJbqediRJiXz-rT3s_QYg",
"version" : {
"number" : "7.17.7",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "78dcaaa8cee33438b91eca7f5c7f56a70fec9e80",
"build_date" : "2022-10-17T15:29:54.167373105Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
# 安全功能
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
systemctl restart elasticsearch
# 进入容器
docker exec -it es /bin/bash
# 生成密码
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
浏览器直接访问http://127.0.0.1:9200,会出现输入用户名、密码的弹窗,
输入elastic和自己设置的密码后,才能看到elasticsearch信息;
账号:elastic
密码:自己设置的
下面的示例为将elastic的密码设置为"123456"
curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }'
*如果密码忘了怎么办?如何重置密码?
1、修改elasticsearch.yml 配置,将身份验证相关配置屏蔽掉;
2、重启ES,查看下索引,发现多了一个.security-7索引,将其删除
3、到此就回到ES没有设置密码的阶段了,如果想重新设置密码,请从第一步开始
Elasticsearch可视化工具,必须要和es版本保持一致
docker pull kibana:7.9.3
mkdir -p /data/kibana/config
kibana.yml 文件
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
docker run -d --restart=always --name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
-v /data/kibana/config:/usr/share/kibana/config \
--network=es-net \
-p 5601:5601 \
kibana:7.9.3
http://192.168.44.8:5601/
第1步:配置账号密码,在kibana.yml配置文件中添加以下内容。 命令:vi config/kibana.yml
# 添加以下内容
elasticsearch.username: "elastic"
elasticsearch.password: "你在es中设置的密码"
第2步:保存配置文件后,退出容器,重启kibana容器。
第3步:重启后,输入kibana的访问地址:http://192.168.1.10:5601,这时已经提示让你输入账号密码了。
账号:elastic
密码:你刚才设置的
下载7.17.6版本分词器,需要与es 版本对应才可以
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip
上传离线包到此目录/data/elasticsearch/plugins
# 重启
docker restart es
# 查看日志
docker logs -f es
ik_smart:最少切分,分词少,但占用内存低一些
ik_max_word:最细切分,分词多,但占用内存多
POST /_analyze
{
"analyzer": "ik_smart",
"text": "张三老铁学习java!"
}
修改ik分词器目录中的config目录中的ikAnalyzer.cfg.xml文件:
DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置comment>
<entry key="ext_dict">ext.dicentry>
<entry key="ext_stopwords">stopword.dicentry>
properties>
指定拓展与停止文件后,在当前目录下新建ext.dic与stopword.dic
ext.dic
stopword.doc
有现在的文件,不需要新建,直接追加
Es应该是目前市场上最主流的开源搜索引擎,对比完lucene,solr发现确实如此,而且es的生态也更加丰富,在大数据方向,elk几乎是必学必会的技能,国内外大厂也都有基于es的应用。
罗万象的博客:https://blog.csdn.net/laoyang360/article/details/52244917
GitHub:https://github.com/elastic/elasticsearch
ES中文网,Es下载,中文文档等:https://www.elastic.co/cn/
Es中文社区:https://elasticsearch.cn/
GitLab是一个Git的代码托管工具,有免费的社区版允许我们在本地搭建代码托管网站,也有付费的企业版网站,能够在线托管代码。
可以看到镜像有很多,选择gitlab-ce-zh,因为这是中文版,还是看中文版的比较舒服,版本的话就根据自己的喜好。
docker search gitlab-ce-zh
docker pull twang2218/gitlab-ce-zh
安装过程会比较久,慢慢等待安装完成。
docker run -d \
-p 9043:443 \
-p 9080:80 \
-p 9022:22 \
--restart always \
--name gitlab \
-v /data/gitlab/etc:/etc/gitlab \
-v /data/gitlab/log:/var/log/gitlab \
-v /data/gitlab/data:/var/opt/gitlab \
--privileged=true \
twang2218/gitlab-ce-zh
docker run -d \
-p 9043:443 \
-p 9080:80 \
-p 9022:22 \
--restart always \
--name gitlab \
-v D:\Docker\gitlab\etc:/etc/gitlab \
-v D:\Docker\gitlab\log:/var/log/gitlab \
-v D:\Docker\gitlab\data:/var/opt/gitlab \
--privileged=true \
twang2218/gitlab-ce-zh
这里解释一下这串代码的情况,复制的话就复制上面的命令
docker run
-d #后台运行,全称:detach
-p 8443:443 #将容器内部端口向外映射
-p 8090:80 #将容器内80端口映射至宿主机8090端口,这是访问gitlab的端口
-p 8022:22 #将容器内22端口映射至宿主机8022端口,这是访问ssh的端口
–restart always #容器自启动
–name gitlab #设置容器名称为gitlab
-v /data/gitlab/etc:/etc/gitlab #将容器/etc/gitlab目录挂载到宿主机/usr/local/gitlab/etc目录下,若宿主机内此目录不存在将会自动创建
-v /data/gitlab/log:/var/log/gitlab #与上面一样
-v /data/gitlab/data:/var/opt/gitlab #与上面一样
–privileged=true #让容器获取宿主机root权限
twang2218/gitlab-ce-zh #镜像的名称,这里也可以写镜像ID
// 添加-a 参数,把启动的,没有启动的都列出来
docker ps
查看当前运行日志
docker logs -f gitlab
修改/data/gitlab/etc/gitlab.rb 文件
external_url 因为默认会用这个端口号作为gitlab的nginx的监听端口。因为我们这里其实是监听的80端口,所以要额外配置映射端口
如果80端口映射80端口,则无需配置。
nginx['listen_port'] = 80
external_url 'http://192.168.44.8:9080'
ssh 拉取配置下面这个
gitlab_rails['gitlab_ssh_host'] = '192.168.44.8'
gitlab_rails['gitlab_shell_ssh_port'] = 9022
配置完成后重启容器
//容器外重启
docker restart gitlab
GitLab占用内存非常恐怖,解决方法
减少数据库缓存
postgresql['shared_buffers'] = "64MB"
减少数据库并发数
postgresql['max_worker_processes'] = 1
减少sidekiq并发数
sidekiq['concurrency'] = 1
减少进程数
unicorn['worker_processes'] = 1
nginx['worker_processes'] = 2
减少超时时间
unicorn['worker_timeout'] = 10
将worker内存上限设置小一点
unicorn['worker_memory_limit_min'] = "100 * 1 << 20"
unicorn['worker_memory_limit_max'] = "220 * 1 << 20"
禁用prometheus
prometheus_monitoring['enable'] = false
#Sending application email via SMTP设置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "[email protected]" # 邮箱登录名称
gitlab_rails['smtp_password'] = "oskirrxanxlzbehf" # POP3/SMTP/IMAP服务授权密码
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
##修改gitlab配置的发信人
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]' # 显示名字
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['gitlab_email_reply_to'] = '[email protected]'
http://192.168.44.8:9080/users/sign_in
用户名:root
密码:git123456
首次登陆会让设置密码,此密码为管理员rooot密码
//容器外停止
docker stop gitlab ``// 这里的gitlab 就是我们上一步docker run 当中使用--name 配置的名字
//容器外重启
docker restart gitlab
//进入容器命令行
docker exec -it gitlab bash
//容器中应用配置,让修改后的配置生效
gitlab-ctl reconfigure
//容器中重启服务
gitlab-ctl restart
//日志查看
docker logs -f --tail=10 gitlab
Canal是阿里开源的一款基于Mysql数据库binlog的增量订阅和消费组件,通过它可以订阅数据库的binlog日志,然后进行一些数据消费,如数据镜像、数据异构、数据索引、缓存更新等。相对于消息队列,通过这种机制可以实现数据的有序化和一致性。
docker pull canal/canal-server:latest
docker images
#启动镜像
docker run --name canal -d canal/canal-server
#进入容器 查看配置文件路径
docker exec -it canal bash
#创建本地文件夹
mkdir -p /data/canal/conf /data/canal/logs
#找到文件位置后 exit退出容器 将容器内部文件copy到外部 copy到/docker/canal/conf
docker cp canal:/home/admin/canal-server/conf/canal.properties /data/canal/conf
docker cp canal:/home/admin/canal-server/conf/example/instance.properties /data/canal/conf
instance.properties
# 设置serverd,一般设置为IP,同一局域网内注意要唯一,如果相同,则它们之间不能设定为主备关系, 目前最新的服务端版本已不需要配置serverId参数
# canal.instance.mysql.slaveId=23
# 数据地址
canal.instance.master.address=192.168.1.88:3306
canal.instance.dbUsername=root
canal.instance.dbPassword=123456
# binlog解析的过滤规则,采用正则表达式 默认为全部表
canal.instance.filter.regex = .*\\..*
canal.properties
# canal admin 配置
canal.admin.manager = 192.168.1.101:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C
#关闭并移除容器
docker rm -f canal
#启动新的 这里-v是将外部的文件挂载到容器内部 这样就不用每次启动都要配置参数了
docker run --name canal -p 11111:11111 -d \
-v /data/canal/conf/instance.properties:/home/admin/canal-server/conf/example/instance.properties \
-v /data/canal/conf/canal.properties:/home/admin/canal-server/conf/canal.properties \
-v /data/canal/logs/:/home/admin/canal-server/logs/ \
canal/canal-server
docker update --restart=always canal
mysql 开启binlog日志
log-bin=mysql-bin #binlog文件名
binlog_format=ROW #选择row模式
server_id=1 #mysql实例id,不能和canal的slaveId重复
mysql中创建canal用户
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
GRANT SHOW VIEW, SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
docker pull canal/canal-admin:latest
# 本地启动
docker run -d -it -h 0 \
-e server.port=8089 \
-e canal.adminUser=admin \
-e canal.adminPasswd=admin123 \
--name=canal-admin \
-p 8089:8089 \
-m 1024m canal/canal-admin
账号admin,初始密码123456(登陆密码并不是admin123,连接密码才是admin123)
# 外部数据库启动
docker run -d -it -h 127.0.0.1 \
-e server.port=8089 \
-e spring.datasource.address=:3306 \
-e spring.datasource.database= canal_manager \
-e spring.datasource.username= canal \
-e spring.datasource.password= canal \
-e canal.adminUser=admin \
-e canal.adminPasswd=admin123 \
--name=canal-admin -p 8089:8089 \
canal/canal-admin
本地启动进入容器查看密码
docker exec -it canal-admin bash
mysql -u -p
select password('admin123');
docker 安装
sudo curl -sSL get.docker.com | sh
启动容器
docker run -dit \
-v $PWD/ql:/ql/data \
-p 5700:5700 \
--name qinglong \
--hostname qinglong \
--restart unless-stopped \
whyour/qinglong:latest
docker-compose 安装
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
启动容器
mkdir qinglong
wget https://raw.githubusercontent.com/whyour/qinglong/master/docker/docker-compose.yml
# 启动
docker-compose up -d
# 停止
docker-compose down