阿里docker容器中安装git服务可以直接git部署吗

14883人阅读
Docker(1)
转载请注明来源-作者@loongshawn:
京东大促,全部应用系统和大部分的DB服务都跑在Docker上。据官方估计,本次大促活动中,京东线上将会启动近15万个Docker容器,从数量上来看,京东是全球范围内Docker的应用大户之一。
为什么docker被京东如此看重,这种微服务化治理到底有何魅力?
决定开始对docker进行下学习并尝试应用到日常业务中来。今天在阿里云ECS的centos上搭建了一个Docker,顺便将一些常用操作记录下,操作系统版本为CentOS6.5。
本文的主要内容介绍阿里云ECS如何安装docker,及docker基础命令详解,通过这篇文章,可以让docker新手开始熟悉和操作docker,慢慢入门。
2、内核支持
官方文档要求Linux kernel至少3.8以上,且docker只能运行在64位的系统中。由于RHEL6和CentOS6的内核版本为2.6,因此必须要先升级内核。
首先,查看阿里云ECS Linux服务器系统内核版本:
2.6.32-220.23.2.ali878.el6.x86_64
2.1、升级内核
由于当前内核版本较低,我们需要把系统内核升级到3.10版本,接下来为具体操作步骤:
(1). yum安装带aufs模块的3.10内核
[dddd@v.sqa.zmf /home/dddd]
$cd /etc/yum.repos.d
$sudo wget http:
$sudo yum install kernel-ml-aufs kernel-ml-aufs-devel
(2). 下载内核
(3). 安装内核
(4). 安装成功
(5). 修改内核配置
修改grub的主配置文件/etc/grub.conf,设置default=0,表示第一个title下的内容为默认启动的kernel(一般新安装的内核在第一个位置)
[dddd@v.sqa.zmf /etc/yum.repos.d]
$sudo vi /etc/grub.conf
(6). 重启系统
[dddd@v.sqa.zmf /etc/yum.repos.d]
$sudo reboot
Broadcast message from dddd@v.sqa.zmf
(/dev/pts/1) at 18:32 ...
The system is going down for reboot NOW!
这时候你的内核就成功升级了
[dddd@v.sqa.zmf /home/admin/
3.10.5-3.el6.x86_64
查看内核是否支持aufs:
[dddd@v.sqa.zmf /home/admin/]
$grep aufs /proc/filesystems
3、Docker安装
3.1、关闭selinux
[dddd@v.sqa.zmf /home/admin/]
$sudo setenforce 0
setenforce: SELinux is disabled
[dddd@v.sqa.zmf /home/admin/]
$sudo sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
3.2、安装epel
[dddd@v.sqa.zmf /]
$sudo rpm -ivh http:
Retrieving http:
warning: /var/tmp/rpm-tmp.NNZYOY: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing...
########################################### [100%]
1:epel-release
########################################### [100%]
[dddd@v.sqa.zmf /]
$sudo sed -i 's/^mirrorlist=https/mirrorlist=http/' /etc/yum.repos.d/epel.repo
3.3、yum安装docker-io
[dddd@v.sqa.zmf /]
$sudo yum -y install docker-io
安装成功:
3.4、启动docker
启动的过程中有点小插曲,第一次启动失败。
[dddd@v.sqa.zmf /]
$sudo service docker start
Starting cgconfig service:
Starting docker:
[dddd@v.sqa.zmf /]
$docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d/1.7.1
OS/Arch (client): linux/amd64
上面看似启动成功,其实是失败了,查看docker日志即可,docker日志地址为/var/log/docker:
$cat /var/log/docker
\nSat Jun 25 18:54:55 CST 2016\n
time="T18:54:56.:00" level=info msg="Listening for HTTP on unix (/var/run/docker.sock)"
time="T18:54:56.:00" level=warning msg="Running modprobe bridge nf_nat failed with message: insmod /lib/modules/3.10.5-3.el6.x86_64/kernel/net/llc/llc.ko \ninsmod /lib/modules/3.10.5-3.el6.x86_64/kernel/net/802/stp.ko \ninsmod /lib/modules/3.10.5-3.el6.x86_64/kernel/net/ipv6/ipv6.ko disable=1\ninsmod /lib/modules/3.10.5-3.el6.x86_64/kernel/net/bridge/bridge.ko \ninsmod /lib/modules/3.10.5-3.el6.x86_64/kernel/net/netfilter/nf_conntrack.ko \ninsmod /lib/modules/3.10.5-3.el6.x86_64/kernel/net/netfilter/nf_nat.ko \n, error: exit status 1"
time="T18:54:56.:00" level=fatal msg="Error starting daemon: Error initializing network controller: Error creating default \"bridge\" network: can't find an address range for interface \"docker0\""
这个问题的来源就是因为docker弱智地为docker0接口选择了一个172.17.42.1的IP,而恰好ECS占用了172.16.0.0/255.240.0.0。
解决方法有两种:
方法一:修改/etc/default/docker,添加DOCKER_OPTS=”–bip=192.168.17.1/24”,重启即可。注意不要用192.168.0.1/24,这段地址也被占用了。
方法二:启动docker服务在指定的网段。sudo docker –bip 192.168.100.1/24 -d &
上述两种方法均能过正常启动,本地均已测试通过,不过我还是觉得方法一好,直接把网段写入配置中,省的每次启动都要带上网段。
针对方法一进行如下说明,在/etc/default/docker文件中新增记录DOCKER_OPTS=”–bip=192.168.17.1/24”
[xiaolong.xiao@v.sqa.zmf /var/log]
$sudo vi /etc/default/docker
Error detected while processing /root/.vimrc:
E518: Unknown option: foldlevel=100
Press ENTER or type command to continue
有关docker0网桥的详细介绍参考:
3.5、查看docker版本
利用命令docker version
[dddd@v.sqa.zmf /var/log]
$sudo docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d/1.7.1
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d/1.7.1
OS/Arch (server): linux/amd64
3.6、开启启动docker
sudo chkconfig docker on
4、docker命令的使用
1、直接输入docker命令来查看所有的Options和Commands。
查看某一个command的详细使用方法:docker COMMAND –help
[dddd@v.sqa.zmf /home/dddd]
$sudo docker pull -help
Warning: '-help' is deprecated, it will be replaced by '--help' soon. See usage.
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from the registry
-a, --all-tags=false
Download all tagged images in the repository
--help=false
Print usage
2、搜索可用的docker镜像:docker search NAME
[dddd@v.sqa.zmf /]
$sudo docker search centos
INFO[0104] GET /v1.19/images/search?term=centos
DESCRIPTION
The official build of CentOS.
ansible/centos7-ansible
Ansible on Centos7
jdeathe/centos-ssh
CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8...
nimmis/java-centos
This is docker images of CentOS 7 with dif...
million12/centos-supervisor
Base CentOS-7 with supervisord launcher, h...
gluster/gluster-centos
Official GlusterFS Image [ CentOS7 +
torusware/speedus-centos
Always updated official CentOS docker imag...
nickistre/centos-lamp
LAMP on centos setup
centos/mariadb55-centos7
nathonfowlie/centos-jre
Latest CentOS image with the JRE pre-insta...
consol/sakuli-centos-xfce
Sakuli end-2-end testing and monitoring co...
darksheer/centos
Base Centos Image -- Updated hourly
blacklabelops/centos
CentOS Base Image! Built and Updates Daily!
timhughes/centos
Centos with systemd installed and running
grossws/centos
CentOS 6 and 7 base images with gosu and l...
kz8s/centos
Official CentOS plus epel-release
harisekhon/centos-scala
Scala + CentOS (OpenJDK tags 2.10-jre7 - 2...
jsmigel/centos-epel
Docker base image of CentOS w/ EPEL installed
labengine/centos
Centos image base
ustclug/centos
USTC centos
januswel/centos
yum update-ed CentOS image
ericuni/centos
centos dev
grayzone/centos
auto build for centos.
dmglab/centos
CentOS with some extras - This is for the ...
repositoryjp/centos
Docker Image for CentOS.
3、下载镜像:docker pull NAME[:TAG]
比如获取最新的centos镜像:docker pull centos:latest
注意:这里要写用docker search搜索到的完整的镜像名。
同时当前下载的是官方的镜像,下载速度会有点慢,centos镜像大约200M,下载耗时半小时。后面有时间将会实践如何搭建私有仓库。
[dddd@v.sqa.zmf /home/dddd]
$sudo docker pull centos:latest
Pulling repository centos
2a332da70fd1: Download complete
3690474eb5b4: Download complete
b48a20c39b28: Download complete
c79ebe41b35a: Download complete
Status: Downloaded newer image for centos:latest
4、查看安装的镜像:docker images [NAME]
$sudo docker images centos
REPOSITORY
VIRTUAL SIZE
2a332da70fd1
3 weeks ago
5、在docker容器中运行命令:docker run IMAGE [COMMAND] [ARG…]
docker run命令有两个参数,一个是镜像名,一个是要在镜像中运行的命令。
注意:IMAGE=REPOSITORY[:TAG],如果IMAGE参数不指定镜像的TAG,默认TAG为latest。
在刚刚下载的镜像中输出”loongshawn”:docker run centos echo ‘loongshawn’
[dddd@v.sqa.zmf /home/dddd]
$sudo docker run centos echo "loongshawn"
loongshawn
6、列出容器:docker ps -a
查看最近生成的容器:docker ps -l
查看正在运行的容器:docker ps
7、显示容器的标准输出:docker logs CONTAINERID
无需拷贝完整的id,一般写最开始的三至四个字符即可。
8、在容器中安装新程序,比如安装ifconfig命令(centos7默认没有ifconfig)
运行镜像,执行ifconfig,找不到此命令。此时进入镜像执行yum install net-tools。
[dddd@v.sqa.zmf /home/dddd]
$sudo docker run -i -t centos /bin/bash
[root@bed98ed5934a /]# ifconfig
bash: ifconfig: command not found
[root@bed98ed5934a /]#
给容器安装网络服务:
执行ifconfig命令:
9、保存对容器的修改并生成新的镜像:docker commit CONTAINERID [REPOSITORY[:TAG]]
REPOSITORY参数可以是新的镜像名字,也可以是旧的镜像名;如果和旧的镜像名和TAG都相同,会覆盖掉旧的镜像。
10、停止正在运行的容器:docker stop CONTAINERID
默认等待10秒钟再杀死指定容器。可以使用-t参数来设置等待时间。
11、查看容器或镜像的详细信息:docker inspect CONTAINERID|IMAGE
参数可以是容器的ID或者是镜像名(NAME:TAG)。
12、删除容器:docker rm CONTAINERID
查看所有容器ID:docker ps -a -q
删除所有的容器:docker rm $(docker ps -a -q)
13、删除镜像:docker rmi IMAGE
14.查看docker的信息,包括Containers和Images数目、kernel版本等。
5、创建容器并登入
1、创建一个新容器并登入:docker run -i -t IMAGE /bin/bash
使用image创建container并进入交互模式,login shell是/bin/bash,现在可以自由的对容器进行操作了。最后使用exit退出容器。
注意:如果IMAGE参数不指定TAG,默认TAG为latest。
$ sudo docker run -i -t centos /bin/bash
2、启动一个退出的容器:docker start CONTAINERID
[dddd@v.sqa.zmf /home/dddd]
$sudo docker start 340943d115b6
340943d115b6
[dddd@v.sqa.zmf /home/dddd]
$sudo docker ps
CONTAINER ID
340943d115b6
"sleep 100"
11 minutes ago
Up 6 seconds
cocky_pare
3、attach到运行中的容器:docker attach CONTAINERID
6、参考资料
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:399009次
积分:4854
积分:4854
排名:第5940名
原创:148篇
转载:15篇
评论:122条
(10)(8)(6)(5)(7)(7)(5)(5)(11)(10)(8)(2)(5)(4)(6)(4)(4)(6)(4)(34)(14)点击crp页面的右上角您的名称,个人信息下面有一个ssh key页面,请看下是否增加了ssh key,如果没有请增加ssh key。可在本机命令行运行cat~/.ssh/id_rsa查看ssh key。
解决方式:在~/.ssh/config 目录文件下面,增加以下内容:Host HostkeyAlgorithms ssh-dss
请先查看git版本:git-version建议升级到2.5以上版本。也可以直接用git clone https://username:password@/username/project.git尝试。
1个客户端可以使用多个key,新增key按照如下步骤操作即可:1、ssh-keygen-t rsa-C"*@*.com" 2、cat~/.ssh/id_rsa_ali拷贝公钥加入到CRP的个人信息-SSH公钥;3、vi~/.ssh/config,增加以下内容:Host crp ...
阿里云Pod仓库指定 需配置阿里云Pod私有仓库,在Podfile中添加source;...pod repo add或git clone失败?仔细核对错误信息,一般为github账号publicKey配置问题。【附】Pod命令使用可参考官方文档。
阿里云Pod仓库指定 需配置阿里云Pod私有仓库,在Podfile中添加source;...pod repo add或git clone失败?仔细核对错误信息,一般为github账号publicKey配置问题。【附】Pod命令使用可参考官方文档。
中拉取网站代码,同时容器也可以将代码变更推送到 Git 或者从 Git 上拉取代码变更。此外,容器还可以使用传递给 Docker 的变量更新编排文件,从而更新您的代码和设置。该镜像还支持 Let’s Encrypt SSL 配置、自定义...
本文对云服务器 ECS Linux 内核中关于网络的相关参数进行了简要介绍,并对常见问题的处理进行说明。...https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/proc.txt ...
SDK的路径是每个工程自己配置的,从git上下载下来的工程对应的Android SDK路径可能与本地路径不符,Android Studio找不到对应路径下的Android SDK进而报错。3.解决方案按照错误提示配置工程中Android SDK的路径或...
DataX源码(1)、下载DataX源码:$git clone git@:alibaba/DataX.git(2)、通过maven打包: cd {DataX_source_code_home}$mvn-U clean package assembly:assembly Dmaven.test.skip=true打包成功,日志显示...
其git 地址为 /loveshell/ngx_lua_waf1.下载配置文件wget /loveshell/ngx_lua_waf/archive/master.zip2. 解压缩unzip master.zip3.移动到nginx的目录下mv ngx_lua_waf-master/...
git clone /sripathikrishnan/redis-rdb-tools cd redis-rdb-tools sudo python setup.py install 使用 redis-rdb-tools 生成内存快照生成内存快照的命令为: rdb-c memory dump.rdb&memory.csv ...
未解决问题?到论坛提问试试吧!
你可能感兴趣在阿里云容器服务上创建一个spring boot应用
你喜欢的文本编辑器或者IDE
JDK1.8或以上版本
Maven3.0或以上版本
如果你不是在linux操作系统上面做开发,你需要docker-toolbox来构建Linux的虚拟环境
第一步:创建一个spring boot应用
下载并解压spring boot应用模板代码git clone https://github.
你喜欢的文本编辑器或者IDE
JDK1.8或以上版本
Maven3.0或以上版本
如果你不是在linux操作系统上面做开发,你需要来构建Linux的虚拟环境
第一步:创建一个spring boot应用
下载并解压spring boot应用模板代码git clone /spring-guides/gs-spring-boot-docker.gitcd gs-spring-boot-docker/complete
编辑代码文件src/main/java/hello/Application.java使之包含以下内容
import org.springframework.boot.SpringA
import org.springframework.boot.autoconfigure.SpringBootA
import org.springframework.boot.bind.RelaxedPropertyR
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.RestC
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello Docker World";
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
@SpringBootApplication和@RestController注解表示Java类Application已经准备好被spring MVC所调用,并提供HTTP服务。注解@RequestMapping("/")表示context path "/"的请求路由到方法home中进行处理,main方法中的SpringApplication.run()用来启动一个spring boot应用。
第二步:容器化spring boot应用
首先需要构建一个docker镜像,通常使用Dockerfile来描述一个docker镜像的构建过程。
一下是文件src/main/docker/Dockerfile内容
FROM java:8
VOLUME /tmp
ADD gs-spring-boot-docker-0.1.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
使用docker-maven-plugin对docker 镜像进行构建,以下为需要修改pom.xml文件的部分
&properties&
&docker.image.prefix&/linhuatest&/docker.image.prefix&
&/properties&
&groupId&com.spotify&/groupId&
&artifactId&docker-maven-plugin&/artifactId&
&version&0.2.3&/version&
&configuration&
&imageName&${docker.image.prefix}/${project.artifactId}&/imageName&
&dockerDirectory&src/main/docker&/dockerDirectory&
&resources&
&resource&
&targetPath&/&/targetPath&
&directory&${project.build.directory}&/directory&
&include&${project.build.finalName}.jar&/include&
&/resource&
&/resources&
&/configuration&
&/plugins&
内容中指定了以下属性
镜像的名称,此处为/linhuatest/gs-spring-boot-docker其中是阿里云镜像仓库的域名,linhuatest是用户的命名空间,gs-spring-boot-docker是用户某个仓库的名称,此处没有镜像tag,默认tag为latest。
Dockerfile文件所在的目录,该目录可以理解为Dockerfile的context,保存Dockerfile依赖的资源
将何种资源拷贝到Dockerfile文件所在的目录,即context中,此处我们只需要编译出来的jar文件。
构建和推送镜像到阿里云镜像仓库,执行下列命令
$ mvn package docker:build # 此处必须要有docker客户端连接到docker daemon,方能构建
$ docker push springio/gs-spring-boot-docker
第三步:在容器服务控制台部署spring boot容器应用
在阿里云容器服务控制台,指定一个集群,点击创建应用
填写应用的描述信息,点击使用镜像创建
点击选择镜像,从镜像列表中检索到镜像仓库gs-spring-boot-docker,点击勾选,点击确定
spring boot应用默认暴露8080端口,填写端口映射中,容器暴露的端口为8080,此时其他容器可以通过对该容器的8080端口进行访问,但是服务还没有暴露到公网
添加路由的容器端口为8080,域名前缀为spring-boot,最终生成的域名将为spring-boot.&cluster_id&.&region_id&.,该域名提供给用户测试域名服务。点击创建并部署将创建和部署应用。
应用成功创建和部署后,在服务列表中,找到服务spring-boot-demo_spring-boot-demo,点击进入服务详情页,访问端点即为该web服务对外暴露的网址。
,得到页面相应如下
本文由用户为个人学习及研究之目的自行翻译发表,如发现侵犯原作者的版权,请与社区联系处理yqgroup@
用云栖社区APP,舒服~
【云栖快讯】数据库技术天团集体亮相,分享一线生产实践经验,告诉你踩过的坑、走过的路,都是老司机,靠谱!干货分享,不可错过!&&
看不懂学习后再来了解
提供了高性能可伸缩的容器应用管理服务,支持在一组云服务器上通过Docker容器来进行应用生命周期管理。
一个基于高可用分布式集群技术构建的服务API开放平台,帮助企业打通内外新旧系统,实现跨技术平台、跨应用系统、跨企...
针对日志类数据的一站式服务,用户无需开发就能快捷完成数据采集、消费、投递以及查询分析等功能,帮助提升运维、运营效...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
Loading...在阿里云上搭建自己的git服务器
在前面的《》一文中,我介绍了如何再NAS上搭建自己的git服务器,但是毕竟NAS还是提供了图形化的界面进行GIT的安装,和真正的服务器环境还是不太一样。这篇文章我就来介绍一下如何在一台全裸的阿里云主机上搭建自己的git服务器。
1. 安装git
首先安装git,一般而言,现在的服务器已经内置了git安装包,我们只需要执行简单的安装命令即可安装。比如:
$ yum install git # centos
$ apt-get install git # ubuntu
上面是直接用root登陆服务器进行操作,也是为了演示方便。
git和mysql不一样,mysql在安装时,得安装mysql-server,即mysql服务器,git是分布式的,每一个安装了git的电脑,既是客户端,也是服务器,git与git之间可以相互通信,而我们所谓的git服务器,实际上和我们自己的电脑没有什么本质上的差别。但是,我们为了更有效的管理项目,都采取中心化的管理方式,因此创建一个“git服务器”,作为其他所有人提交代码的最终终端。
2.创建git用户及权限
我们当然不允许直接使用root来进行通信交互了,所以,我们创建一个git用户来作为今后提交代码的用户。
$ adduser git
执行这条命令之后,你发现在/home目录下多了一个git目录,按理来说,现在,你的系统中多了这个git用户,并且家目录在/home/git。但是,我们并不希望这个用户通过ssh连接到服务器上面去,所以,我们要禁止这个用户使用ssh连接上去进行操作。我们通过编辑一个权限文件来处理:
$ vi /etc/passwd
找到类似于
git:x:1001:1001:,,,:/home/git:/bin/bash
这样的行,你看到那个末尾的/bin/bash,就是允许ssh连接操作的权限,我们把它改为/user/bin/git-shell,结果如下:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样处理好,git就不能ssh连上去了(实际上是可以的,只不过会闪退)。
我们还得给git分配一个密码,执行:
$ passwd git 123456(你的密码)
这个密码用在你后面提交代码的时候使用。
这个是git里面比较特殊的一步操作,通信的时候,客户端与服务器需要一个证书进行验证。操作方法很简单,首先在你自己的电脑上(ubuntu)生成自己的一个公钥:
$ ssh-keygen -t rsa
这时你自己电脑上就有一个公钥了,但是在哪里呢?在.ssh目录下,.开头的文件夹都是隐藏的,但是可以cd进去。
$ vi id_rsa.pub
这样就能看到你的公钥了,把所有的内容复制下来。接下来,我们去回服务器上面操作。
$ cd /home/git/
$ mkdir .ssh
$ vi authorized_keys
如果是裸机,服务器上面/home/git目录下应该没有.ssh目录,所以我们自己创建,打开(自动创建)authorized_keys之后,把刚才复制下来的公钥黏贴进去,ok了,保存退出。
使用证书,主要是为了无需密码就可以提交代码,具体请看《》。
4.初始化一个git仓库
我习惯把这类东西丢到/var下去,所以,我们在/var下面创建一个git目录
$ mkdir git
$ chown -R git:git git
$chmod 777 git
接下来,我们用git命令初始化一个仓库:
$ git init --bare arepoforyourproject.git
初始化完成之后,这个空的仓库就OK了。
这里有一个细节,就是.git目录必须要有可读写权限,因为当我们在push的时候,是使用git用户推送到服务器上面去,会有一个写入的过程,如果不赋予可写权限,push就会失败。
5.克隆试试
回到你本地的电脑上,我们通过克隆来试试仓库是否可以使用:
$ git clone git@10.0.0.121:/var/git/arepoforyourproject.git
然后会提示你输入git的密码,输入进去,然后会再提示你克隆了一个空白的版本库。这说明服务器已经OK了。
6.多用户和权限管理
如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用来管理公钥。
这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。
版权所有 &
本站内容未经许可,不允许转载

我要回帖

更多关于 阿里云部署git服务器 的文章

 

随机推荐