Docker实战
容器运用比较广泛,微服务、CI。
常见概念理解:容器(软件包)、Docker(容器管理平台)、K8s(容器集群管理、分布式容器管理平台)、Ingress
案例
[2018-10-11]
1. 启动Nginx
docker run -d -p 80:80 --name nginx
-v C:/Users/xusj/Git/:/Users/xusj/Git/:rw
-v C:/Users/xusj/nginx/vhosts/:/etc/nginx/conf.d/:ro
registry.cn-hangzhou.aliyuncs.com/xusj_repo/nginx
# 涉及认证、Git、 挂载
docker run -d -p 80:80 -p 443:443 --name nginx -v /etc/letsencrypt/archive/blogyw.meizhangzheng.com/:/etc/letsencrypt/archive/blogyw.meizhangzheng.com/:rw -v /usr/meizhangzheng/git/:/usr/meizhangzheng/git/:rw -v /usr/meizhangzheng/nginx/vhosts/:/etc/nginx/conf.d/:ro meizhangzheng/nginx
# mysql 启动类,并配置挂载路径
docker run -itd -p 3307:3306 --name test_mysql -v /usr/local/mysqlData/test/conf:/etc/mysql -v /usr/local/mysqlData/test/data:/var/lib/mysql -v /usr/local/mysqlData/test/mysql-files:/var/lib/mysql-files/ -e MYSQL_ROOT_PASSWORD=123456 mysql
2.启动Eureka服务
docker run -d -p 8761:8761 --name eureka registry.cn-hangzhou.aliyuncs.com/xusj_repo/eurekaservice
[2019-01-02]
3.启动redis服务
docker run -d -p 6379:6379 --name redis -v C:/Users/xusj/data:/data registry.cn-hangzhou.aliyuncs.com/xusj_repo/redis:5.0.3 --appendonly yes
– 新版6.0.9
mkdir -p /usr/meizhangzheng/redis/conf
mkdir -p /usr/meizhangzheng/redis/data
wget https://github.com/redis/redis/blob/6.0.9/redis.conf
docker run -d --privileged=true -p 6379:6379 --restart always -v /usr/meizhangzheng/redis/conf/redis.conf:/etc/redis/redis.conf -v /usr/meizhangzheng/redis/data:/data --name redis meizhangzheng/redis:6.0.9 redis-server /etc/redis/redis.conf --appendonly yes
redis 开启远程服务
1. 注释掉 bind 127.0.01
2. 将protected-mode yes 修改为 protected-mode no
3. 修改密码 requirepass xxxx
4. 重启redis服务
[2019-01-08]
4.启动dashboard服务
-- 挂在多目录
docker run -d -p 9000:9000 --name dashboard -v c:/data/logs:/data/logs -v c:/data/tmp:/data/tmp dashboard-server /bin/bash
docker run -d -p 9000:9000 --name dashboard -v c:/data/logs:/data/logs dashboard-server /bin/bash
docker run -d -p 9000:9000 --name dashboard -v c:/data/logs:/data/logs -e PARAMS="" dashboard-server /bin/bash
构建dashboard镜像: 进入dockerfile目录,执行命令: docker build -t dashboard-server .
5.启动sdma服务
docker run -d -p 8092:8092 --name sdma -v c:/data/logs:/data/logs -v c:/data/tmp:/data/tmp sdma-server /bin/bash
6. 启动nexus服务
docker run -d -p 8081:8081 --name nexus meizhangzheng/nexus3
# 首次登陆,获取用户密码; admin/pwd,然后重置密码
# docker exec -it 容器id bash 进入容器
# cat /opt/sonatype/sonatype-work/nexus3/admin.password
[2019-01-08]
1.常见异常日志
例:实时查看docker容器名为eureka_config_1的最后10行日志
$ sudo docker logs -f -t --tail 10 eureka_config_1
(1) C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint dashboard (50e202813f9aad2440c489382f1d2b2c8b24075e584a13c8776943ab17f23bff): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:8089:tcp:172.17.0.2:8089: input/output error. —-> 重启
(2) /data/run.sh: line 19: syntax error: unexpected end of file —-> 将脚本编码格式转换:从dos 转为unix (使用UE)
[2021-04-26]
docker: Error response from daemon: service endpoint with name jenkins already exists.
场景:启动容器时
#运用镜像启动容器命令 -p 可绑定多个端口 如80:80 443:443
docker run -d -p 8080:8080 -p 50000:50000 -v /usr/meizhangzheng/jenkins:/var/jenkins_home --name jenkins --restart always --privileged=true -u root jenkins/jenkins
分析:说明端口/服务被占用了。
1.解决方案
- 移除服务
docker rm -f jenkins
- 清理此容器的网络占用 格式:docker network disconnect –force 网络模式 容器名称
docker network disconnect --force bridge jenkins
- 简查是否还有同名容器占用 格式:docker network inspect 网络模式
docker network inspect bridge
注:当时发现仍然未清理,再执行 清理容器网络语句。
- 重新启动
docker run ...
2.特别说明
如果原来已经部署成功了,因为已经有相应的配置信息,可考虑先停掉原来的服务,修改服务名即可。
#运用镜像启动容器命令 将jenkins 改为 jenkins1
docker run -d -p 8080:8080 -p 50000:50000 -v /usr/meizhangzheng/jenkins:/var/jenkins_home --name jenkins1 --restart always --privileged=true -u root jenkins/jenkins
参考文档
【解决方案】docker: Error response from daemon: endpoint with name xxx already exists in network bridge