1. 程式人生 > >從0開始搭建自動部署環境

從0開始搭建自動部署環境

集成 地址 path password data tar.gz emctl ice 通過

從0開始搭建自動部署環境

前言

從Docker改變使用動態庫後,DooD不再可行,而Dind依然可行。針對此改變,重新整理並記錄自動部署環境配置步驟。

此環境是實現微服務自動部署的基礎,使用jenkins持續集成工具,並內置了java和maven,並實現了容器內運行Docker命令的功能。

軟件環境

  • 宿主機win10
  • 虛擬機CentOS-7-x86_64-Minimal-1708
  • Docker 17.09.0-ce
  • apache-maven-3.5.2
  • jdk 1.8.0_151
  • jenkins 2.73.3

虛擬機安裝配置

1. 安裝Docker

參考官方教程Get Docker CE for CentOS
可選項:更換源。官方源下載Docker可能很慢,更換成國內的Docker源,比如阿裏雲的Docker源https://download.docker.com/linux/centos/docker-ce.repo

2. 啟動Docker並設置開機自啟

$ sudo service docker start
$ sudo chkconfig docker on

3. 更換Docker鏡像源

從Docker官方源下載鏡像可能很慢,更換成阿裏雲的源即可。阿裏雲專屬加速器地址。教程照搬一下,方便查閱。

安裝/升級你的Docker客戶端

推薦安裝1.10.0以上版本的Docker客戶端,參考文檔 docker-ce

如何配置鏡像加速器

針對Docker客戶端版本大於1.10.0的用戶

您可以通過修改daemon配置文件/etc/docker/daemon.json來使用加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF‘
{
  "registry-mirrors": ["https://a2srrwpd.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

容器安裝配置

1. 創建Dockerfile

該Dockerfile已實現:

  1. 安裝openjdk1.8、maven、jenkins、git
  2. maven配置阿裏雲鏡像源
  3. jenkins自啟
  4. 時區調整成中國上海

Dockerfile內容如下:

FROM centos:centos7.4.1708

MAINTAINER "Simon Sun"<[email protected]>

ADD http://www-us.apache.org/dist/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz /opt

USER root

RUN tar -zxvf /opt/apache-maven-3.5.2-bin.tar.gz -C /opt && yum install -y wget && yum install -y initscripts && yum install -y sudo && yum install -y java-1.8.0-openjdk && yum install -y java-1.8.0-openjdk-devel && yum install -y git

# install jenkins
RUN wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo && rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key && yum install -y jenkins

# install docker with aliyun mirror source
RUN yum install -y yum-utils   device-mapper-persistent-data   lvm2 && yum-config-manager     --add-repo     https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && yum-config-manager --disable docker-ce-edge && yum install -y docker-ce

RUN chmod a+x /opt/apache-maven-3.5.2/bin/mvn

# add user jenkins and add user jenkins to group docker
# set root password to root
RUN echo "jenkins ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && gpasswd -a jenkins docker && echo "root:root" | chpasswd

ENV JAVA_HOME /usr/lib/jvm/java
ENV PATH $JAVA_HOME/bin:$PATH
ENV MAVEN_HOME /opt/apache-maven-3.5.2
ENV PATH $MAVEN_HOME/bin:$PATH

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# add aliyun maven mirror source
RUN sed -i ‘/<\/mirrors>/i\<mirror>\n  <id>nexus-aliyun<\/id>\n  <mirrorOf>central<\/mirrorOf>\n  <name>Nexus aliyun<\/name>\n  <url>http://maven.aliyun.com/nexus/content/groups/public<\/url>\n<\/mirror>‘ /opt/apache-maven-3.5.2/conf/settings.xml

USER jenkins

CMD sudo service jenkins start && tail -F /var/log/jenkins/jenkins.log

2. 編譯Dockerfile

docker build -t jeesun/java-jenkins .

3. 啟動容器

docker run --privileged -i -t -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 jeesun/java-jenkins

此時我已經使用jenkins賬戶登錄到容器中,根據Dockerfile,此時jenkins已經自啟,且目前正在運行命令tail -F /var/log/jenkins/jenkins.log

  1. Ctrl+P+Q退出bash。命令Ctrl+P+Q保證退出容器不關閉容器。
  2. 訪問http://localhost:8080。當然,因為我裝的是minimal版的CentOS,沒有圖形界面,只能在宿主機上通過http://虛擬機ip:8080來訪問。可使用命令ip addr查看虛擬機ip地址。
  3. 使用docker ps查看CONTAINER ID。
  4. 使用docker exec -it container_id /bin/bash進入容器。
  5. 首次訪問該地址需要使用/var/lib/jenkins/secrets/initialAdminPassword中的初始管理員密碼來解鎖jenkins。 執行cat /var/lib/jenkins/secrets/initialAdminPassword就可以知道密碼了。
  6. 按照頁面指示繼續,jenkins會推薦下載一些插件。我默認都安裝了。如果安裝失敗重試即可。然後就是填入新的管理員賬號密碼。完成後正式進入jenkins管理頁面。

5. 測試

選擇新建,填入項目名稱,選擇構建一個自由風格的軟件項目。
構建——》增加構建步驟——》Execute shell——》填入docker run hello-world——》保存。選擇立即構建。如果不報錯,氣球為藍色,說明成功。

報錯解決

1. 錯誤1

錯誤內容

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

解決方案

  1. 優先參考官方Manage Docker as a non-root user。
  2. 關閉虛擬機的selinux(可能有用)。參考查看 SELinux狀態及關閉SELinux。

  3. 在虛擬機中修改/var/run/docker.sock的權限。(很危險!!!)

    $ sudo chmod 777 /var/run/docker.sock

2. 錯誤2

錯誤內容

Failed to get D-Bus connection: Operation not permitted

解決方案

忽略。

3. 錯誤3

錯誤內容

Couldn‘t connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

解決方案

權限問題。解決辦法同錯誤1。

參考內容

  1. https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo
  2. Docker in Docker
  3. DooD(不再有用,因為新版Docker使用了動態庫)
  4. Dockerfile: ADD vs COPY
  5. Maven鏡像更換為阿裏雲中央倉庫(精)
  6. tailf、tail -f、tail -F三者區別
  7. How to automatically start a service when running a docker container?

從0開始搭建自動部署環境