安装参考 https://help.aliyun.com/document_detail/51853.html?spm=a2c4g.11174283.6.548.2d3b4541ehG1Ny
1、添加yum源。
yum install epel-release –y yum clean all yum list
2、 安装并运行Docker。
yum install docker-io –y systemctl start docker
3、 检查安装结果
docker infodocker 开启远程访问
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/info
telnet服务端2375端口测试
[root@client ~]# telnet 192.168.100.7 2375
telnet> 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 dockerdocker 快速上手
参考文章 https://docs.docker.com/engine/reference/commandline/docker 常用命令
yum install docker #安装docker systemctl start docker #启动docker systemctl enable docker #开机启动 systemctl stop docker #关闭docker docker 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内部网络busServeNet docker 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安装vim
apt-get install vim安装telnet
apt-get install telnet安装ifconfig
apt-get install net-tools安装ping
apt install iputils-pingDocker 安装MongoDB示例
mongo docker run -p 27017:27017 -v /data/mongo/db --name mongoDB -d mongo --auth创建mongo auth用户
docker exec -it mongoDB bash
mongo
mongo > use admin
mongo > db.createUser({user:'root',pwd:'root',roles:[{role:"userAdminAnyDatabase", db: "admin"}]})
mongo > exit
mongo
mongo > use admin
mongo > db.auth(‘root’, ‘root’)
创建数据库普通用户
mongo > use test
mongo > db.createUser({user:'testDB',pwd:'123456', roles:[{role:"dbOwner", db:"test"}]})
mongo > show users
远程连接工具
Robo 3T
mongoDB角色 内建角色
Read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库 dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin:允许用户向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.conf docker 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.conf
upstream 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.7 docker pull mysql:5.7
快速安装
docker run -d -e MYSQL_ROOT_PASSWORD=root --name group_mysql_1 mysql:5.7
复制配置文件到宿主机
mkdir /data/mysql/data mkdir /data/mysql/logs docker 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/bash root@appplication:/# mysql -uroot -p mysql> 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=utf8 slow_query_log = ON slow_query_log_file =/logs/tmp_slow.log long_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 alwaysgitlab配置IP
如: http://e91a46988168/root/config-server.git,将e91a46988168改为ip
vim /etc/gitlab/gitlab.rb vim /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 -version openjdk version "16-ea" 2021-03-16 OpenJDK 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.41 docker cp group_httpd_1:/usr/local/apache2/conf/httpd.conf /data/httpd/conf/httpd.conf docker 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.html 404 http://192.168.0.10/404.htmlDocker 安装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-7 docker cp group_php_apache_1:/etc/httpd/conf/httpd.conf /data/php-apache/conf/httpd.conf docker 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 http://192.168.0.10/index.phpDocker 安装WireMock
下载镜像
docker pull rodolpheche/wiremock:2.25.1
安装
docker run -d -p 8080:8080 --name group_wiremock_1 rodolpheche/wiremock:2.25.1Docker 安装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/webappDocker 安装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.shDocker 安装ctrip apollo(阿波罗)
docker 安装指导 https://hub.docker.com/r/nobodyiam/apollo-quick-start 下载镜像
docker pull nobodyiam/apollo-quick-start:latestTODO 待实现 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:8080 Rainloop 管理端 http://localhost:8088/?admin Rainloop 用户端 http://localhost:8088 邮箱管理后台http://localhost:8080 账号 admin 密码 ewomail123 Rainloop 管理端 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



