分类 Docker 下的文章

1、准备工作

升级系统

$ sudo yum clean all
$ sudo yum update

查看系统版本
$ cat /etc/redhat-release

检查是否安装wget命令,后面会用到

如未安装,使用以下命令进行安装
yum install -y wget

切换yum源,不然可能会太慢

备份源文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的源,以下两个任选一个即可
阿里的:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
网易的:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
清除系统yum缓存,并且将服务器上的软件包信息重新生成缓存到本地
yum clean all
yum makecache
更新yum
yum update -y

2、安装docker

安装所需的包 yum-utils
yum install -y yum-utils device-mapper-persistent-data lvm2

设置阿里云稳定版本的docker的源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

centos8默认使用podman代替docker,所以需要containerd.io
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm

安装最新稳定版的docker-ce
yum install docker-ce docker-ce-cli containerd.io

启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker

验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version

docker-compose版本选择

curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

查看docker-compose版本
docker-compose version

3、安装Jenkins

安装JDK

yum install -y java

安装git

因我们需要在jenkins中配置git,所以需要安装,如不需,可不安装
yum install git
查看版本
git --version

添加Jenkins库到yum库

Jenkins将从这里下载安装
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

安装jenkins

yum install -y jenkins
安装过程完成后,启动Jenkins服务并启用它以在系统引导时启动

sudo systemctl start jenkins

sudo systemctl enable jenkins

端口默认8080,如需修改端口号:
配置jenkis的端口
vi /etc/sysconfig/jenkins
找到修改端口号:
JENKINS_PORT="8080"

4.配置Jenkins

gitlab创建账号,用于jenkins使用

根据你再jenkins中配置的令牌方式不同,需要在gitlab中生成访问令牌。我自己试了几次,都有问题,干脆直接在jenkins中配置了gitlab的用户名和密码,所以这里只创建了账号,配置下项目的角色权限就OK了,没有其他操作了

安装插件

  • Git Parameter ( 用于参数化构建中动态获取项目分支 )
  • Generic Webhook Trigger ( 用于解析 Webhook 传过来的参数 )
  • GitLab ( 用于推送构建结果给 GitLab )
    安装插件的方法,如下图:

找到插件管理界面
QQ截图20201120111229.png

如图所示进行搜索安装
QQ截图20201120111314.png

5、添加项目部署

新建项目

选择FreeStyle project 类型

填写源码管理

如图所示,因为我们尚未配置和选择Credentials,所以会如出现下面红色的错误,选择添加-Jenkins,进行配置凭证,

QQ截图20201120111949.png

添加过程如下,我直接使用了账号密码方式,所以设置如下,如果你需要使用 gitlab pai token 方式,还需要到gitlab进行配置,具体自行google。

QQ截图20201120112227.png

保存后,返回选择我们刚创建的credentials即可。

QQ截图20201120112419.png

编写Shell脚本

构建项目中,我们选择执行shell脚本,

因我不想在服务器上编译程序,所以我选择了在本地编译发布后,将发布文件夹也上传到gitlab中,虽然这样不是很好,但首先提高了Jenkins部署效率,而且省去了好多的gitlab配置。

脚本如下:

#!/bin/sh
cd /var/lib/jenkins/workspace/test-auth/testAuthServer.Host
docker container prune << EOF
y
EOF
docker container ls -a | grep "test-auth"
if [ $? -eq 0 ];then
    docker container stop test-auth
    docker container rm test-auth
fi
docker image prune << EOF
y
EOF

docker build -t test-auth .
docker run -d -p 5001:80 --name=test-auth test-auth

DockerFile文件如下:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

COPY /bin/Release/netcoreapp3.1/publish .
ENTRYPOINT ["dotnet", "testAuthServer.Host.dll"]

然后再修改其他项目配置文件,并部署其他项目。

6、其他

docker安装redis

docker pull redis:latest
docker run -itd -d --name redis-test -p 6379:6379 redis

防火墙开放端口

查看当前已经开放的端口:

firewall-cmd --list-ports
开启端口,以8888为例:

firewall-cmd --zone=public --add-port=8888/tcp --permanent
重启防火墙:

firewall-cmd --reload

Nginx安装

https://www.cnblogs.com/zhizihuakai/p/12055618.html

sudo /usr/local/nginx/nginx         # 启动
/usr/local/nginx/nginx -s reload    # 重新载入配置文件
/usr/local/nginx/nginx -s reopen    # 重启 Nginx
/usr/local/nginx/nginx -s stop      # 停止 Nginx

错误信息

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/prune: dial unix /var/run/docker.sock: connect: permission denied

解决方案

修改run/docker.sock文件权限为666可解决

Docker 启动容器时,使用如下命令方式即可。

docker run -it -d -p 5001:80 -p 5101:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=5101 -e ASPNETCORE_Kestrel__Certificates__Default__Password="abcdef" -e ASPNETCORE_Kestrel__Certificates__Default__Path=aaabbb.pfx --name=auth-server auth-server --restart always

Docker容器做端口映射报错

docker: Error response from daemon: driver failed programming external connectivity on endpoint ....

解决方法

docker服务启动时定义的自定义链DOCKER被清除
重启即可systemctl restart docker


connect: permission denied

docker: docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock ....

解决方法

修改 var/run/docker.sock的权限属性为666或777可解决。但,每次docker重启后,该权限将会重置,需要重新再次配置。


查看容器的日志

docker logs -f -t --tail 200 auth-server

以配置文件方式、守护态 运行redis ,同时,重启docker会自动启动

docker run -p 6379:6379 --name redis --restart always -v /root/redis/redis01/conf/redis.conf:/etc/redis/redis.conf -v /root/redis/redis01/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

Centos获取ip,无法使用ifconfig

ifconfig这个命令是在net-tools.x86_64这个包里,需要安装该工具,命令:yum install net-tools.x86_64

Docker 进入容器命令

docker exec -it 44fc0f0582d9 /bin/bash

查看容器ip地址:

[root@localhost ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' 1d3d739a0b3b
172.17.0.5
[root@localhost ~]# 

容器和宿主机之间文件拷贝

1、从容器里面拷文件到宿主机?

命令

docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 

示例:

docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt

2、从宿主机拷文件到容器里面

命令

docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

示例:

docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js

查看Linux版本信息

cat /etc/issue

COPY failed: stat /var/lib/docker/tmp/docker-builder...no such file or directory

错误如下:

Step 4/5 : COPY /bin/Release/netcoreapp3.1/publish .
COPY failed: stat /var/lib/docker/tmp/docker-builder255452545/bin/Release/netcoreapp3.1/publish: no such file or directory

看到此类错误,需要排查文件或文件夹名称是否有写错,如果一切正确,还需要查看是否配置了.dockerignore文件,并且要COPY的文件夹是否添加到了Ignore列表中,如果有,删除即可。

容器无法访问外网问题

默认构建镜像时,使用的是bridge模式,需访问外网,可以指定网络为host

docker build -t ideology-usermanager . --network=host

Docker下Redis常用操作

进入容器:

docker exec -it redis /bin/bash

进入redis操作命令:

redis-cli -h 127.0.0.1 -p 6379

查看所有key

keys *

清空数据

flushall 所有数据库

flushdb 当前库

Docker-compose 操作

  • docker-compose up 用于部署一个 Compose 应用。 ...
  • docker-compose stop 停止Compose 应用相关的所有容器,...
  • docker-compose rm 用于删除已停止的 Compose 应用。 ...
  • docker-compose restart 重启已停止的 Compose 应用。 ...
  • docker-compose ps 用于列出 Compose 应用中的各个容器。 ...

-f参数,指定yml文件
docker-compose -f docker-compose-dev.yml up