centos 部署docker,docker部署web项目
大家好,关于centos 部署docker很多朋友都还不太明白,今天小编就来为大家分享关于docker部署web项目的知识,希望对各位有所帮助!
CentOS6.x上部署Docker容器环境的全流程攻略
Docker.io是轻量级的容器引擎+映像仓库,在LXC(linux轻量级容器)的基础上构建,可以运行任何应用程序。
docker.io的核心层由以下几个部分组成:
1、可执行程序,/usr/bin/docker
2、docker.io网站上有一系列创建好的操作系统和应用程序映像
3、AUFS(另一个统一文件系统)来实现文件系统的快照,文件变化,控制只读或读写的需求。
4、LXC(Linux轻量级容器)
5、Cgroups(各种资源和命名空间的管理)
在本文写作的时候,最新版本是0.5.3,但目前开发很活跃,一些功能和特性可能在新版本中会发生变化。
需要注意的是CentOS 6.5与7.0的安装是有一点点不同的,CentOS-6上docker的安装包叫docker-io,并且来源于Fedora epel库,这个仓库维护了大量的没有包含在发行版中的软件,所以先要安装EPEL,而CentOS-7的docker直接包含在官方镜像源的Extras仓库(CentOS-Base.repo下的[extras]节enable=1启用)。前提是都需要联网,具体安装过程如下。
1.禁用selinux
[/code]
# getenforce
enforcing
# setenforce 0
permissive
# vi/etc/selinux/config
SELINUX=disabled
...
[/code]
2.安装 Fedora EPEL
epel-release-6-8.noarch.rpm包在发行版的介质里面已经自带了,可以从rpm安装。
复制代码
代码如下:
# yum install epel-release-6-8.noarch.rpm
//或
yum-y install
如果出现GPG key retrieval failed: [Errno 14] Could not open/read 问题,请在线安装epel,下载RPM-GPG-KEY-EPEL-6文件。
这一步执行之后,会在/etc/yum.repos.d/下生成epel.repo、epel-testing.repo两个文件,用于从Fedora官网下载rpm包。
3.检查内核版本
复制代码
代码如下:
# uname-r
2.6.32-431.el6.x86_64
# cat/etc/redhat-release
CentOS release 6.5(Final)
看到这个最低的内核版本,事实运行起来是没太大问题的,你也可以升级到3.10.x版本。
另外你也可以运行脚本check-config.sh,来检查内核模块符不符合(下面有些missing的,我的docker还是可以正常启动):
复制代码
代码如下:
[root@sean~]#./check-config
warning:/proc/config.gz does not exist, searching other paths for kernel config...
info: reading kernel config from/boot/config-2.6.32-431.el6.x86_64...
Generally Necessary:
- cgroup hierarchy: properly mounted [/cgroup]
- CONFIG_NAMESPACES: enabled
- CONFIG_NET_NS: enabled
- CONFIG_PID_NS: enabled
- CONFIG_IPC_NS: enabled
- CONFIG_UTS_NS: enabled
- CONFIG_DEVPTS_MULTIPLE_INSTANCES: enabled
- CONFIG_CGROUPS: enabled
- CONFIG_CGROUP_CPUACCT: enabled
- CONFIG_CGROUP_DEVICE: enabled
- CONFIG_CGROUP_FREEZER: enabled
- CONFIG_CGROUP_SCHED: enabled
- CONFIG_MACVLAN: enabled
- CONFIG_VETH: enabled
- CONFIG_BRIDGE: enabled
- CONFIG_NF_NAT_IPV4: missing
- CONFIG_IP_NF_TARGET_MASQUERADE: enabled
- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: missing
- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: enabled
- CONFIG_NF_NAT: enabled
- CONFIG_NF_NAT_NEEDED: enabled
Optional Features:
- CONFIG_MEMCG_SWAP: missing
- CONFIG_RESOURCE_COUNTERS: enabled
- CONFIG_CGROUP_PERF: enabled
- Storage Drivers:
-"aufs":
- CONFIG_AUFS_FS: missing
- CONFIG_EXT4_FS_POSIX_ACL: enabled
- CONFIG_EXT4_FS_SECURITY: enabled
-"btrfs":
- CONFIG_BTRFS_FS: enabled
-"devicemapper":
- CONFIG_BLK_DEV_DM: enabled
- CONFIG_DM_THIN_PROVISIONING: enabled
- CONFIG_EXT4_FS: enabled
- CONFIG_EXT4_FS_POSIX_ACL: enabled
- CONFIG_EXT4_FS_SECURITY: enabled
假如你是自己编译内核,请特别留意几个绝对不能缺少的:DM_THIN_PROVISIONING、IP_NF_TARGET_MASQUERADE、NF_NAT。(AUFS_FS没有对应选项,还不清楚怎么回事,但不是必须)
4.安装 docker-io
复制代码
代码如下:
# yum install docker-io
Dependencies Resolved
===========================================================================================
Package
Arch Version Repository Size
===========================================================================================
Installing:
docker-io
x86_64 1.1.2-1.el6 epel 4.5 M
Installing for dependencies:
lua-alt-getopt noarch 0.7.0-1.el6 epel 6.9 k
lua-filesystem x86_64 1.4.2-1.el6 epel 24 k
lua-lxc
x86_64 1.0.6-1.el6 epel 15 k
lxc
x86_64 1.0.6-1.el6 epel 120 k
lxc-libs
x86_64 1.0.6-1.el6 epel 248 k
Transaction Summary
===========================================================================================
Install 6 Package(s)
许多文档介绍到这里,下一步为挂载/cgroup文件系统,我的docker版本为1.1.2,没有修改/etc/fstab的步骤。
5.启动试运行
复制代码
代码如下:
# service docker start
//或
# docker-d
6.以守护模式运行docker.io(在一个新的终端里)
复制代码
代码如下:
[root@localhost~]# docker-d
2013/08/21 07:47:07 WARNING: Your kernel does not support cgroup swap limit.
2013/08/21 07:47:07 Listening for HTTP on/var/run/docker.sock(unix)
7.在centos6.4容器里输出hello world
复制代码
代码如下:
[root@localhost~]# docker run centos:6.4 echo"hello world"
2013/08/21 07:48:41 POST/v1.4/containers/create
2013/08/21 07:48:41 POST/v1.4/containers/c6bc9e80097e/start
2013/08/21 07:48:41 POST/v1.4/containers/c6bc9e80097e/attach?logs=1stderr=1stdout=1stream=1
hello world
8.从容器里测试ping
复制代码
代码如下:
[root@localhost~]# docker-dns'8.8.8.8' run centos:6.4 ping-c 3 yahoo.com
2013/08/21 08:02:15 POST/v1.4/containers/create
2013/08/21 08:02:15 POST/v1.4/containers/c40a1244f9bc/start
2013/08/21 08:02:15 POST/v1.4/containers/c40a1244f9bc/attach?logs=1stderr=1stdout=1stream=1
PING yahoo.com(98.138.253.109) 56(84) bytes of data.
64 bytes from ir1.fp.vip.ne1.yahoo.com(98.138.253.109): icmp_seq=1 ttl=48 time=323 ms
64 bytes from ir1.fp.vip.ne1.yahoo.com(98.138.253.109): icmp_seq=2 ttl=48 time=329 ms
64 bytes from ir1.fp.vip.ne1.yahoo.com(98.138.253.109): icmp_seq=3 ttl=49 time=302 ms
--- yahoo.com ping statistics---
3 packets transmitted, 3 received, 0% packet loss, time 2304ms
rtt min/avg/max/mdev= 302.032/318.318/329.656/11.807 ms
9.异常
在我的一次安装过程中,很不幸遇到下面的问题:
docker-d启动,或tail-f/var/log/docker查看日志
复制代码
代码如下:
[f32e7d9f]+job initserver()
[f32e7d9f.initserver()] Creating server
[f32e7d9f]+job serveapi(unix:///var/run/docker.sock)
2014/10/22 13:02:45 Listening for HTTP on unix(/var/run/docker.sock)
Error running DeviceCreate(createPool) dm_task_run failed
[f32e7d9f]-job initserver()= ERR(1)
2014/10/22 13:02:45 Error running DeviceCreate(createPool) dm_task_run failed
\nWed Oct 22 14:35:54 CST 2014\n
再或者是service docker restart
复制代码
代码如下:
Stopping docker:
[ OK ]
Starting cgconfig service: Error: cannot mount cpuset to/cgroup/cpuset: Device or resource busy
/sbin/cgconfigparser; error loading/etc/cgconfig.conf: Cgroup mounting failed
Failed to parse/etc/cgconfig.conf
[FAILED]
Starting docker:
[ OK ]
全选复制放进笔记Unable to enable network bridge NAT: iptables failed: iptables-I POSTROUTING-t nat-s 172.17.42.1/16!-d 172.17.42.1/16-j MASQUERADE: iptables v1.4.7: can't initialize iptables table `nat': Table does not exist(do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
Centos7系统docker部署plex,打造个人影音中心
构建个人影音中心的CentOS7系统与Docker部署Plex流程详解
在构建个人影音中心的过程中,我们首先需要做好准备工作,包括部署Docker、安装必要的依赖包、设置稳定镜像仓库、更新yum软件包索引并建立数据缓存。安装Docker,确保其最新版本,并且进行开机自启与启动操作。配置加速,通常通过修改/etc/docker/daemon.json文件实现,例如使用vim/etc/docker/daemon.json命令。
接着,我们安装Docker Compose,这将帮助我们在Docker中部署服务。为实现这一目标,我们首先需要安装wget软件,然后通过引入rpel7源并更新yum包索引来确保软件包的最新性。最后,执行安装docker-compose命令。
在部署Plex前,我们需要创建相关目录以及获取Plex令牌。访问plex.tv/claim获取声明令牌,用于将服务器登录到您的Plex帐户。随后,您需要将获取到的令牌粘贴到docker-compose文件对应位置,完成此操作。
接下来,创建docker-compose文件并运行。编辑docker-compose.yaml文件,通过vim docker-compose.yaml命令实现。运行docker-compose up-d命令启动容器。在容器运行过程中,可以使用docker ps命令查看容器运行状态。
最后,通过域名访问Plex管理页面检查部署结果。如果一切顺利,您将能够访问到Plex管理页面,确保个人影音中心的构建成功。
使用Docker部署GitLab
查看是否拉取成功
编写内容
在该文件目录下,授予 gitlab_start.sh执行权限
要注意端口是否被占用
修改 gitlab_start.sh文件,将映射到宿主机的端口改为 8088,或者其它没被占用的端口
重新运行./gitlab_start.sh文件,报错如下
这是因为之前的容器虽然没有运行起来,但是已经创建了,把它删除掉
重新运行 gitlab_start.sh文件
可以看到容器成功启动
创建 docker-compose.yml文件,并在该文件所在的文件夹目录下运行 docker-compose up-d
需要事先安装 docker-compose
安装docker-compose
注:端口和映射目录可根据需要修改
若开放访问端口为 80, external_url可不加端口号,默认80
若以 3.1方法创建,需要修改相关配置文件
在Gitlab容器运行状态时,重启服务,并远程访问网站测试
*若访问Gitlab出现502等错误,使用命令检查错误原因
e.g.
查看上述配置文件,查找错误原因
[图片上传失败...(image-e9789-1636370071222)]
虽然容器启动成功,但是却没办法根据 ip:port访问gitlab
拉取tomcat镜像
为了测试8088端口是否可用,先把gitlab的容器暂停
启动tomcat容器,并将tomcat容器的8080端口映射到宿主机的8088端口
一切正常,访问ip:8088,还是和以前一样访问不了
因为之前系统的防火墙一直是关闭的并且其它的服务能正常访问,所以没有怀疑是防火墙的问题
把防火墙打开
访问之前能正常访问的服务,果然没法正常访问。
把该服务的端口开发,正常访问。
打开8088端口
再次访问
返回tomcat的404页面: HTTP Status 404– Not Found
虽然是404页面,但是说明此时的端口是能正常访问的
把tomcat的容器停止运行,重新运行gitlab容器
虽然没启动成功,但离成功更进一步了:)
尝试把这个容器删除掉,再创建一次后还是得到这个错误。
还是访问不了,检查一下GitLab内部是否有问题
一切正常
我再次换成tomcat容器进行测试,发现8088端口访问不了了。
但是在宿主机内ping本机是可以的
但是,换成 ip:8088则不行
根据以上两篇文章,提出阿里云的内网eth0网段正好跟Docker的虚拟网卡都是 172网段,有冲突
观察发现我使用的云服务器也是阿里云,并且通过 ifconfig查看
并且查看阿里云的内网ip确实也是 172开头。
编辑配置文件/etc/docker/daemon.json,若 daemon.json文件不存在新建即可。
重新启动docker服务
可以看到docker0的地址变了。
但是要注意,使用 docker启动的服务会默认使用 docker0,如果是用 docker-compose启动的服务则不会。上面的 br-12aa369ee4a6对应的是docker-compose启动的服务,可以看到还是172的网段。
docker-compose up使用自定义的网段的两种方式(从其根源指定)
根据该文使用方法2,即修改 daemon.json。但并不能成功访问,我的环境是: docker:20.10.7, docker-compose:1.24.1
后面发现访问不成功的原因在于 docker与防火墙之间的关系,可以关掉防火墙,开启 docker,不能访问则打开防火墙。在它们之间来回试探==。
后面尝试过关闭 firewalld,打开 iptables。
在启用 iptables时,一般关掉 iptables可以正常访问,打开则不能正常访问。
在启用 firewalld时,按照 docker和 firewalld之间启动关闭的顺序不同,有时是开着防火墙能访问,有时是关了防火墙能访问。
但是容器内不能访问外部网络,该问题现在还未解决。有一种迂回的解决方法就是容器使用 host网络模式
问题:怀疑是docker,firewalld与iptables之间的设置问题
Docker与IPtables
docker端口映射及外部无法访问问题
Docker and IPtables
还有一种访问不了GitLab的情况是端口映射和配置文件有误。
快速的解决方法:将宿主机端口号和容器号设置相同,可参考下面的博客。
利用GitLab Docker images安装GitLab(填坑)
[图片上传失败...(image-457ad3-1636370071221)]
如果系统环境正常,安装会十分顺利,一般不会有奇怪的问题。
我在不同的服务器安装过
阿里云 CentOS 7.6:访问正常,但是因内存不够出现502错误,容器内可正常连接外部网络
阿里云 Alibaba Cloud Linux 2:可能不能正常访问容器,容器内不能正常连接外部网络。怀疑是防火墙与docker的问题。
修改密码: