欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

docker实践

时间:2023-05-13
Docker 环境搭建 docker 安装

安装参考 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

安装vim

apt-get install vim

安装telnet

apt-get install telnet

安装ifconfig

apt-get install net-tools

安装ping

apt 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

Docker 安装OpenJdk环境 参考文献

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。