從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源download.docker.com/linux/cento…
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已實現:
- 安裝openjdk1.8、maven、jenkins、git
- maven配置阿里雲映象源
- jenkins自啟
- 時區調整成中國上海
Dockerfile內容如下:
FROM centos:centos7.4.1708
MAINTAINER "Simon Sun"<simon.sun.dev@hotmail.com>
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
。
- 按
Ctrl+P+Q
退出bash。命令Ctrl+P+Q
保證退出容器不關閉容器。 - 訪問http://localhost:8080。當然,因為我裝的是minimal版的CentOS,沒有圖形介面,只能在宿主機上通過
http://虛擬機器ip:8080
來訪問。可使用命令ip addr
檢視虛擬機器ip地址。 - 使用
docker ps
檢視CONTAINER ID。 - 使用
docker exec -it container_id /bin/bash
進入容器。 - 首次訪問該地址需要使用
/var/lib/jenkins/secrets/initialAdminPassword
中的初始管理員密碼來解鎖jenkins。 執行cat /var/lib/jenkins/secrets/initialAdminPassword
就可以知道密碼了。 - 按照頁面指示繼續,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複製程式碼
解決方案
- 優先參考官方Manage Docker as a non-root user。
關閉虛擬機器的selinux(可能有用)。參考檢視 SELinux狀態及關閉SELinux。
在虛擬機器中修改
/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。