安装参考 https://help.aliyun.com/document_detail/51853.html?spm=a2c4g.11174283.6.548.2d3b4541ehG1Ny
1、添加yum源。
yum install epel-release –yyum clean allyum list
2、 安装并运行Docker。
yum install docker-io –ysystemctl start docker
3、 检查安装结果
docker info
docker 开启远程访问vim /etc/docker/daemon.json{ "hosts":["unix:///var/run/docker.sock","tcp://0.0.0.0:2375" ]} #重新加载配置文件systemctl daemon-reload #重启服务systemctl restart docker #查看端口是否开启netstat -nptl #直接curl看是否生效curl http://127.0.0.1:2375/infotelnet服务端2375端口测试[root@client ~]# telnet 192.168.100.7 2375telnet> quit
国内docker pull镜像加速参考文章 https://developer.aliyun.com/article/745392配置加速器
[root@localhost network-scripts]# vi /etc/docker/daemon.json{"registry-mirrors": ["https://mj9kvemk.mirror.aliyuncs.com"]}
重启docker
[root@localhost docker]# systemctl restart docker
docker 快速上手参考文章 https://docs.docker.com/engine/reference/commandline/docker 常用命令
yum install docker#安装dockersystemctl start docker#启动dockersystemctl enable docker#开机启动systemctl stop docker#关闭dockerdocker search mysql#搜索命令docker pull mysql#下载镜像docker images#查看下载了那些镜像docker rmi 镜像id#删除镜像docker ps#查看运行中的容器docker ps -a#查看所有容器docker stop 容器id#停止运行中的容器docker start 容器id#启动容器docker logs 容器id#查看容器启动日志docker rm 容器id#删除容器docker inspect 容器id | grep IPAddress #查看容器IP信息docker network create busServeNet #创建docker内部网络busServeNetdocker network ls#查看docker内部网络信息docker --link 容器名称A --link 容器名称B#不建议,该方式不安全.允许B容器到A容器的单向访问docker run –-name 容器名镜像名 #简单启动容器(完整启动查看相关启动命令)docker run –d –p 8888:8080 –-name xx --restart always#-d 后台运行、-p 服务器端口:容器端口 端口映射、--name 容器名称 指定容器名称、--restart always 自动重启-------------------------------------------------it : 目前的理解浅薄,就是要等在容器内的命令执行完毕才会出来到当前操作; 没有-it的加 就相当于在容器内执行一下命令,不等容器内部是否执行完毕直接出来,而我们看见的他在上面是因为容器内的执行快,(行动派可以试试在里面写个循环制造时间验证)那么就出来了 -it ....bash 的组合-it ....bash:上面说到在加上-it 会等容器内的操作执行完毕,而bash 是打开容器内的一个终端近程,又因为it的等待 所以就会一直以终端连接的方式停留在容器内部
Docker 使用前篇 容器命名推荐建议采用骆驼命名法,例如groupNginxTest案例一,在java微服务中,通过容器名字访问别的容器时,如:
在java微服务中,通过容器名字访问别的容器时,如:security: oauth2: client: client-id: xxxx client-secret: xxx resource: jwt: key-uri: http://group_oauth_serve:80/oauth/token_key不能使用“_”,该符号会被转义成%5F,由于无法识别网络别名,致使访问其他容器失败
network命令详解参考文章 https://www.cnblogs.com/jsonhc/p/7823286.html创建一个网络名为my_net且driver为bridge的网络
docker network create my_net
查看local的网络信息
docker network ls
加入my_net网络,并通过–network-alias指定了各自的别名,groupTomcat1和groupTomcat2都在my_net网络中,它们之间可以通过别名进行互相访问。如果没指定别名,也可以通过容器名进行互相访问
docker run –d –p 8888:8080 -v /etc/localtime:/etc/localtime:ro --network my_net --network-alias groupTomcat1 --name groupTomcat1 tomcat
docker run –d –p 8888:8080 -v /etc/localtime:/etc/localtime:ro --network my_net --network-alias groupTomcat1 --name groupTomcat2 tomcat
镜像导入和导出导出镜像, nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
docker save -o nginx.tar nginx:latest
导入镜像
docker load -i nginx.tar
与宿主机同步时间
参考文章 https://www.cnblogs.com/lobin/p/10581964.html
使用docker容器部署的应用,会出现时间与主机不一致的情况,容器时间与主机差8个小时,宿主机的与容器的/etc/localtime不一致
docker run –d –p 8888:8080 -v /etc/localtime:/etc/localtime:ro --name group_tomcat_1 tomcat
--------------------------说明-----------------------------------v /etc/localtime:/etc/localtime:ro共享宿主机时间,后面的 :ro 指定该 volume 为只读
如果里面运行的是java程序,哪么程序时间还是会8个小时的差别:主要是Java或取时间是从/etc/timezone里获取时区,解决方法:挂载主机的/etc/timezone,或者是通过jvm参数将时区信息传进jvm里:-Duser.timezone=GMT+08
docker run –d –p 8888:8080 -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro --name group_test_serve test_serve
Dockerfile 定义环境变量指定时区,推荐这种
ENV TZ=Asia/Shanghai
容器内安装常用命令参考文章 https://cloud.tencent.com/developer/article/1401076 安装apt-get,方便安装其他命令
apt-get update
安装vimapt-get install vim
安装telnetapt-get install telnet
安装ifconfigapt-get install net-tools
安装pingapt install iputils-ping
Docker 安装MongoDB示例mongodocker run -p 27017:27017 -v /data/mongo/db --name mongoDB -d mongo --auth
创建mongo auth用户docker exec -it mongoDB bashmongomongo > use adminmongo > db.createUser({user:'root',pwd:'root',roles:[{role:"userAdminAnyDatabase", db: "admin"}]})mongo > exitmongomongo > use adminmongo > db.auth(‘root’, ‘root’)
创建数据库普通用户mongo > use testmongo > db.createUser({user:'testDB',pwd:'123456', roles:[{role:"dbOwner", db:"test"}]})mongo > show users
远程连接工具Robo 3T
mongoDB角色 内建角色
Read:允许用户读取指定数据库readWrite:允许用户读写指定数据库dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profileuserAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。root:只在admin数据库中可用。超级账号,超级权限
dbOwner 角色 注:dbOwner 代表数据库所有者角色,拥有最高该数据库最高权限。 Docker 安装Nginx示例 参考文献
Docker 安装 Nginx https://blog.csdn.net/QCIWYY/article/details/91045070
菜鸟教程-Docker 安装 Nginx https://www.runoob.com/docker/docker-install-nginx.html
下载镜像docker pull nginx:1.17.5
目录结构[root@centos01 nginx]# pwd/data/nginx[root@centos01 nginx]# tree -L 1.├── conf├── logs└── www
复制容器内默认配置文件到本地docker cp group_nginx_1:/etc/nginx/nginx.conf /data/nginx/conf/nginx.confdocker cp group_nginx_1:/etc/nginx/conf.d /data/nginx/conf/conf.d
目录说明: www: 目录将映射为 nginx 容器配置的虚拟目录。 logs: 目录将映射为 nginx 容器的日志目录。 conf: 目录里的配置文件将映射为 nginx 容器的配置文件。
安装快速安装
docker run -d --name group_nginx_1 -p 8088:80 nginx:1.17.5
完整安装
docker run -d -p 80:80 -v /data/nginx/www:/usr/share/nginx/html -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf/conf.d:/etc/nginx/conf.d -v /data/nginx/logs:/var/log/nginx -v /etc/localtime:/etc/localtime:ro --privileged=true --name group_nginx_1 nginx:1.17.5
命令说明
-p 80:80: 将容器的 80 端口映射到主机的 80端口。--name group_nginx_1:将容器命名为group_nginx_1。-v /data/nginx/www:/usr/share/nginx/html:将我们自己创建的 www 目录挂载到容器的 /usr/share/nginx/html。-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将我们自己创建的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf。-v /data/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf:将我们自己创建的 default.conf 挂载到容器的 /etc/nginx/conf.d/default.conf。-v /data/nginx/logs:/var/log/nginx:将我们自己创建的 logs 挂载到容器的 /var/log/nginx。
其他
浏览器输入:http://192.168.0.10:8088/
自定义nginx映射
vim ./33web.confupstream myGateway { server 127.0.0.1:9010; #server 192.168.10.121:3333 backup; #热备}#error_page 404 /404.html; #错误页server {keepalive_requests 120; #单连接请求上限次数。 listen 80; #监听端口 server_name 127.0.0.1; #监听地址 location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 #root path; #根目录 #index vv.txt; #设置默认页 proxy_pass http://myGateway; #请求转向mysvr 定义的服务器列表 #deny 127.0.0.1; #拒绝的ip #allow 172.18.5.54; #允许的ip } }
Docker 安装Mysql示例 准备docker search mysql:5.7docker pull mysql:5.7
快速安装
docker run -d -e MYSQL_ROOT_PASSWORD=root --name group_mysql_1 mysql:5.7
复制配置文件到宿主机
mkdir /data/mysql/datamkdir /data/mysql/logsdocker cp group_mysql_1:/etc/mysql/conf.d /data/mysql/conf
安装docker run -d -p 3306:3306 -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=root --privileged=true --name group_mysql_1 mysql:5.7
---------------------------参数说明------------------------------------------v /data/mysql/logs/slow.log:/var/lib/mysql/tmp_slow.log 设置慢查询日志存储位置-v /etc/localtime:/etc/localtime:ro 容器内部使用主机时间-e MYSQL_ROOT_PASSWORD=root 设置默认root用户的密码--privileged=true 给容器加上特定权限
修改原始密码登录进入mysql
[root@appplication mysql]# docker exec -it groupA_mysql_1 env LANG=C.UTF-8 /bin/bashroot@appplication:/# mysql -uroot -pmysql> show databases;mysql> use 数据库;------------------------------------- 参数说明----------------------------------容器系统使用的是POSIX字符集,POSIX字符集是不支持中文的,而C.UTF-8是支持中文的 只要把系统中的环境 LANG 改为"C.UTF-8"格式即可解决问题LANG=C.UTF-8 字母一定要大写env LANG=C.UTF-8
修改原始密码 参考#mysql实践-修改密码
set password for root@localhost = password('root');
自定义配置my.cnf ,修改默认编码为utf-8
vim mysql.cnf------------------------------------------------------[client]default-character-set=utf8[mysqld]character_set_server=utf8slow_query_log = ONslow_query_log_file =/logs/tmp_slow.loglong_query_time = 1[mysql]default-character-set=utf8
------------------------配置说明------------------------------#作用于外部的显示default-character-set=gbk#作用于内部,会作用于创建库表时默认字符集character_set_server=gbk#开启并记录慢查询slow_query_log = ON #开启慢查询long_query_time = 1 #慢查询的临界值, 单位秒slow_query_log_file =/logs/tmp_slow.log #慢查询数据保存的位置
------------------------重启mysql------------------------------docker restart group_mysql_1
关闭远程连接关闭远程连接
update mysql.user set host='172.17.0.%' where user='root' and host='%';
修改该用户的密码,默认是root
set password for root@'172.17.0.%' = password('新的密码');
Docker 安装Zipkin 2.18 参考文献官方文档https://blog.csdn.net/huweijian5/article/details/88991634 下载镜像
docker pull openzipkin/zipkin:2.18#简单安装docker run -d -p 9411:9411 openzipkin/zipkin:2.18
初始化数据库mysql首先创建数据库zipkin,编码使用utf8执行脚本建表https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql 安装
docker run -d --name groupA_zipkin_1 -p 9411:9411 -v /etc/localtime:/etc/localtime:ro -e MYSQL_USER=root -e MYSQL_PASS=root -e MYSQL_HOST=192.168.0.10 -e STORAGE_TYPE=mysql -e MYSQL_DB=zipkin -e MYSQL_TCP_PORT=3306 --net host openzipkin/zipkin:2.18 --restart always
访问安装后访问地址http://192.168.0.10:9411/zipkin/
Docker 安装Gitlab 参考文献 https://www.jianshu.com/p/080a962c35b6
gitlab配置外部数据库
docker pull gitlab/gitlab-ce:12.3.5-ce.0
安装docker run -d --name group_gitlab_1 --privileged=true -p 443:443 -p 80:80 -p 222:22 -v /etc/localtime:/etc/localtime:ro -v /data/gitlab/conf:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:12.3.5-ce.0 --restart always
gitlab配置IP如: http://e91a46988168/root/config-server.git,将e91a46988168改为ip
vim /etc/gitlab/gitlab.rbvim /data/gitlab/conf/gitlab.rb,修改:external_url 'http://192.168.0.10:80'rm -rf /data/gitlab/data重启容器:docker restart group_gitlab_1
重置密码重置gitlab登录密码
进入容器命令:docker exec -it <容器id> /bin/bash执行gitlab-rails consoleuser = User.where(username: ‘root’).firstuser.password = ‘password’user.save! 访问
最好是将80端口换成其他端口
http://192.168.0.10:80
https://www.cnblogs.com/wx170119/p/12449342.html
下载镜像docker pull openjdk:16-jdk
安装安装命令
docker run -p 7043:80/udp -d -it -v /data/java/:/jar/ --name groupJava openjdk:16-jdk
说明
将宿主机的7443与容器内80端口进行绑定将宿主机的/data/java目录与容器内的jar目录进行绑定
简单使用进入容器内部
docker exec -it groupJava /bin/bash
查看jdk版本
bash-4.4# java -versionopenjdk version "16-ea" 2021-03-16OpenJDK Runtime Environment (build 16-ea+13-521)OpenJDK 64-Bit Server VM (build 16-ea+13-521, mixed mode, sharing)
运行自定义jar包
Docker 安装apache2环境 下载镜像
docker pull httpd:2.4.41
目录结构[root@centos01 httpd]# pwd/data/httpd[root@centos01 httpd]# tree.├── conf├── logs└── www
准备复制/usr/local/apache2/conf/httpd.conf到/data/httpd/conf/httpd.conf
docker run -d -p 80:80 --name group_httpd_1 httpd:2.4.41docker cp group_httpd_1:/usr/local/apache2/conf/httpd.conf /data/httpd/conf/httpd.confdocker rm -f group_httpd_1
安装docker run -d -p 80:80 -v /data/httpd/www/:/usr/local/apache2/htdocs/ -v /data/httpd/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /data/httpd/logs/:/usr/local/apache2/logs/ -v /etc/localtime:/etc/localtime:ro --privileged=true --name group_httpd_1 httpd:2.4.41
简单使用vim /data/httpd/www/404.html404http://192.168.0.10/404.html
Docker 安装php-apache环境 下载镜像docker pull webdevops/php-apache-dev:centos-7
目录结构[root@centos01 php-apache]# pwd/data/php-apache[root@centos01 php-apache]# tree.├── conf├── logs└── www
准备复制/etc/httpd/conf/httpd.conf到/data/php-apache/conf/httpd.conf
docker run -d -p 80:80 --name group_php_apache_1 webdevops/php-apache-dev:centos-7docker cp group_php_apache_1:/etc/httpd/conf/httpd.conf /data/php-apache/conf/httpd.confdocker rm -f group_php_apache_1
安装docker run -d -p 80:80 -v /data/php-apache/www/:/app -v /data/php-apache/conf/httpd.conf:/etc/httpd/conf/httpd.conf -v /etc/localtime:/etc/localtime:ro --privileged=true --name group_php_apache_1 webdevops/php-apache-dev:centos-7
简单使用vim /data/httpd/www/index.php<?php phpinfo(); ?>http://192.168.0.10/index.php
Docker 安装WireMock下载镜像
docker pull rodolpheche/wiremock:2.25.1
安装
docker run -d -p 8080:8080 --name group_wiremock_1 rodolpheche/wiremock:2.25.1
Docker 安装WireMock-GUI下载镜像
docker pull holomekc/wiremock-gui:2.25.1
安装
docker run -d -p 8080:8080 --name group_wiremock_1 holomekc/wiremock-gui:2.25.1
管理界面
#进入管理页面 ,请自行替换ip地址http://127.0.0.1:30080/__admin/webapp
Docker 安装Zookeeper 下载镜像docker pull zookeeper:3.5.6
目录结构[root@centos01 zookeeper]# pwd/data/zookeeper[root@centos01 zookeeper]# tree.├── data└── zoo.cfg#将zoo.cfg复制到本地docker cp group_zookeeper_1:/conf/zoo.cfg /data/zookeeper/zoo.cfg
快速安装docker run -d -p 2181:2181 --name group_zookeeper_1 zookeeper:3.5.6
完整安装docker run -d -p 2181:2181 -v /data/zookeeper/data/:/data/ -v /data/zookeeper/zoo.cfg:/conf/zoo.cfg -v /etc/localtime:/etc/localtime:ro --privileged=true --name group_zookeeper_1 zookeeper:3.5.6
其他docker exec -it group_zookeeper_1 bash##zookeeper客户端工具zkCli.sh
Docker 安装ctrip apollo(阿波罗)docker 安装指导 https://hub.docker.com/r/nobodyiam/apollo-quick-start 下载镜像
docker pull nobodyiam/apollo-quick-start:latest
TODO 待实现 Docker 安装邮件服务器docker.io/bestwu/ewomail
docker run -d -h mail2.5taogame.com -p 25:25 -p 109:109 -p 110:110 -p 143:143 -p 465:465 -p 587:587 -p 993:993 -p 995:995 -p 81:80 -p 8088:8080 -v /data/mail/mysql/data/:/ewomail/mysql/data/ -v /data/mail/vmail/:/ewomail/mail/ -v /data/mail/ssl/certs/:/etc/ssl/certs/ -v /data/mail/ssl/private/:/etc/ssl/private/ -v /data/mail/rainloop/:/ewomail/www/rainloop/data -v /data/mail/ssl/dkim/:/ewomail/dkim/ --name group_ewomail_1 bestwu/ewomail --restart=always
邮箱管理后台http://localhost:8080Rainloop 管理端 http://localhost:8088/?adminRainloop 用户端 http://localhost:8088邮箱管理后台http://localhost:8080 账号 admin 密码 ewomail123Rainloop 管理端 http://localhost:8088/?admin 账号密码在邮箱管理后台添加设置Rainloop 用户端 http://localhost:8088 账号密码在邮箱管理后台添加设置
推送到阿里云容器镜像服务器登录服务器: docker login --username=liuyuedeyuzss@163.com registry.cn-shenzhen.aliyuncs.com创建镜像:docker tag 27764c8758a0 registry.cn-shenzhen.aliyuncs.com/zs_group/zs_images:zs_rabbitmq推送到服务器:docker push registry.cn-shenzhen.aliyuncs.com/zs_group/zs_images:zs_rabbitmq拉取镜像:docker pull registry.cn-shenzhen.aliyuncs.com/zs_group/zs_images:zs_rabbitmq
其他 linux常用命令#查看端口占用情况netstat -tunlp
踩坑 设置 Docker 容器时间
设置 Docker 容器时间与宿主机的一致
docker run –d –p 8888:8080 -v /etc/localtime:/etc/localtime:ro tomcat 创建容器,并且容器将共享主机时间,后面的 :ro 指定该 volume 为只读
privileged=true 参数Fatal error in defaults handling、Program aborted!Centos7安全Selinux禁止了一些安全权限,导致mysql和mariadb在进行挂载/var/lib/mysql的时候会提示以上信息在docker run中加入 --privileged=true 给容器加上特定权限eg: docker run -d -p 3306:3306 -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --privileged=true --name group_mysql_1 mysql:5.7