docker學習

Docker

入坑docker嘿嘿

ubantu安裝docker html

官方安裝教程java

docker經常使用命令mysql

#用Dockerfile構建鏡像
docker build -t tomsun28/ubantu:6.0 .

#經過docker鏡像生成docker容器
#-it是交互式模式(對應-d是後臺啓動)
#-p 用本機的8080端口映射容器的80端口
docker run -it -p 8080:80 --name containerName tomsun28/ubantu:6.0


#進入正在運行的容器內
docker exec -it containerName /bin/bash


docker images 查看鏡像
docker ps -a  查看全部容器狀態
docker rm 刪除容器
docker rmi 刪除鏡像

systemctl restart docker 重啓docker

docker 構建mariadblinux

#用官方鏡像啓動mariadb,將存放數據庫信息的文件夾/var/lib/mysql映射到本地
docker run -d -p 3306:3306 --restart=always --name mariadb -e TIMEZONE=Asia/Shanghai -v /mnt/dockerWorkspace/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=admin  tomsun28/mariadb:1.0

#進入mariadb容器
docker exec -it mariadb /bin/bash

#登陸數據庫
mysql -uroot -padmin

Dockerfile----基於Ubuntu基礎鏡像生成的Tomcat中間件鏡像git

# VERSION 1.0.0
# 基礎鏡像爲ubuntu:16.04
FROM ubuntu:16.04

MAINTAINER tomsun28  <www.usthe.com>

ENV TOMCAT_VERSION 8.0.48


# 設置系統格式UTF8  
ENV LANG=C.UTF-8


# 設置系統時區 shanghai
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone


# 更新源前的操做
RUN echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
RUN echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections

# 更新APT源 安裝依賴,安裝 oracle jdk8,wget,unzip,tar
RUN apt-get update && \
    apt-get install -y --no-install-recommends software-properties-common && \
    add-apt-repository ppa:webupd8team/java && \
    apt-get update && \
    apt-get install -y --no-install-recommends oracle-java8-installer  wget unzip tar && \
    rm -rf /var/lib/apt/lists/* && \
    rm -rf /var/cache/oracle-jdk8-installer

# 設置JAVA_HOME環境變量 
ENV JAVA_HOME /usr/lib/jvm/java-8-oracle

# 安裝tomcat
RUN wget --quiet --no-cookies http://apache.rediris.es/tomcat/tomcat-8/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz -O /tmp/tomcat.tgz && \
tar xzvf /tmp/tomcat.tgz -C /opt && \
mv /opt/apache-tomcat-${TOMCAT_VERSION} /opt/tomcat && \
rm /tmp/tomcat.tgz && \
rm -rf /opt/tomcat/webapps/examples && \
rm -rf /opt/tomcat/webapps/docs && \
rm -rf /opt/tomcat/webapps/ROOT

# 配置tomcat user
ADD tomcat-users.xml /opt/tomcat/conf/

# tomcat環境變量
ENV CATALINA_HOME /opt/tomcat
ENV PATH $PATH:$CATALINA_HOME/bin

# 暴露端口
EXPOSE 8080
EXPOSE 8009

# 工做目錄
WORKDIR /opt/tomcat

# run 鏡像以後啓動tomcat
CMD ["/opt/tomcat/bin/catalina.sh", "run"]

*******************************
#tomcat配置文件 tomcat-users.xml

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="admin-gui"/>
  <role rolename="admin-script"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-status"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <user name="admin" password="admin" roles="admin-gui,admin-script,manager-gui,manager-status,manager-script,manager-jmx"/>
</tomcat-users>

*******************************
#build生成鏡像

docker build -t tomsun28/tomcat:1.1

Dockerfile----基於jenkins基礎鏡像生成容器內jenkins用戶運行docker的jenkins鏡像github

*******************Dockerfile*************

FROM jenkins:latest
MAINTAINER tomsun28 <usthe.com>
#安裝jenkins插件
USER jenkins
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/plugins.txt

USER root
ARG dockerGid=999

#將jenkins用戶放docker組,安裝gosu
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group \
    && apt-get update &&  apt-get install -y gosu \
    && apt-get install -y libltdl7 \
    && rm -rf /var/lib/apt/list/*


COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

*****************plugins.txt*******************

git:latest

*****************entrypoint.sh******************


#! /bin/bash
set -e
chown -R 1000 "$JENKINS_HOME"
exec gosu jenkins /bin/tini -- /usr/local/bin/jenkins.sh


*************build生成jenkins鏡像******************
將三個文件放入同一目錄下執行:
docker build -t tomsun28/jenkins:1.1 .

詳細代碼更多鏡像Dockerfile可見個人github tomsun28's dockerfileweb

使用Docker持續集成與自動化部署

本身用docker搭了一套項目開發的持續集成部署,在這個記錄下流程萬一又給忘了sql

#構建Docker私有倉庫
docker run -d --restart=always --name registry \
-v /opt/dockerWorkspace/registry:/tmp/registry -p 5000:5000 tomsun28/registry:1.0
#向倉庫推送鏡像
docker push 127.0.0.1:5000/tomcat:1.0
#向倉庫拉取鏡像
docker pull 127.0.0.1:5000/tomcat:1.0
#server gave HTTP response to HTTPS client問題
touch /etc/docker/daemon.json
echo "{ "insecure-registries":["127.0.0.1:5000"] }" >> /etc/docker/daemon.json
#構建Jenkins(1.6低版本jenkins)
docker run -d -p 8080:8080 --name jenkins --restart=always \
-v /opt/dockerWorkspace/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock  tomsun28/jenkins:1.0
#參數/opt/dockerWorkspace/jenkins_home:/var/jenkins_home將目錄映射到本地磁盤
#參數/var/run/docker.sock:/var/run/docker.sock映射本地docker,這樣就能在jenkins容器使用docker
默認用戶密碼 admin/admin
#構建Jenkins(2.6新版本jenkins)
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --restart=always \
-v /opt/dockerWorkspace/jenkins_home:/var/jenkins_home \
-v $(which docker):/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock  tomsun28/jenkins:1.1
小插曲:baidu雲過時了轉便宜的jd雲,在jd雲下運行的jenkins容器提交表單服務器無響應,其餘跳轉是好的,各類排查了一天哎,最後實在沒辦法提交issue給jd立刻回了是docker的MTU和它們雲服務器MTU不同會致使有時docker網絡不通。。。。。。。。只想說日狗d了

Dockerfile tomcat項目所對應的tomcat鏡像構建Dockerfile,將此Dockerfile放在當前項目下,示例項目名爲WebHelloWorlddocker

#VERSION 1.0.0
#基礎鏡像爲tomcat,從我搭建鏡像倉庫拉取tomcat鏡像
FROM tomsun28/tomcat:1.1

#簽名
MAINTAINER tomsun28 "tomsun28@outlook.com"


#加入WAR包到tomcat下(1),官方tomcat鏡像的tomcat位置在/usr/local/tomcat
RUN rm -rf /usr/local/tomcat/webapps
ADD ./target/WebHelloWorld.war /usr/local/tomcat/webapps/WebHelloWorld.war

#加入WAR包到tomcat下(2)本身的tomcat:1.1鏡像的tomcat位置在/opt/tomcat
RUN rm -rf /opt/tomcat/webapps/WebHelloWorld*
ADD ./target/WebHelloWorld.war /opt/tomcat/webapps/WebHelloWorld.war

Jenkins細節配置shell

配置->項目名稱:最好爲github上代碼的項目名稱,必須小寫
配置->源碼管理->Git:URL爲github上的項目clone url,下面默認master分支
配置->觸發遠程構建選上->身份證令牌:eg:hahaha

用戶->設置->查看API Token:    userID=xxxx,apiToken=xxxx
這兩個github配置會用到

Jenkins配置構建步驟shell腳本

#!/bin/bash

#build in jenkins sh

#docker docker hub倉庫地址,以後把生成的鏡像上傳到  registry or docker hub
REGISTRY_URL=127.0.0.1:5000
#docker login --username tomsun28 --password xxxx

#根據時間生成版本號
TAG=$REGISTRY_URL/$JOB_NAME:`date +%y%m%d-%H-%M`

#使用maven 鏡像進行編譯 打包出 war 文件
docker run --rm --name mvn -v /opt/dockerWorkspace/maven:/root/.m2 \
-v /opt/dockerWorkspace/jenkins_home/workspace/$JOB_NAME:/usr/src/mvn -w /usr/src/mvn/ \
tomsun28/maven:1.0 mvn clean install -Dmaven.test.skip=true

#使用放在項目下面的Dockerfile打包生成鏡像
docker build -t $TAG $WORKSPACE/.

docker push $TAG
docker rmi $TAG

#判斷以前運行的容器是否還在,在就刪除
if docker ps -a | grep -i $JOB_NAME;then
docker rm -f $JOB_NAME
fi

#用最新版本的鏡像運行容器

docker run -d -p 80:8080 --name $JOB_NAME -v /opt/dockerWorkspace/tomcat/$JOB_NAME/logs:/opt/tomcat/logs $TAG

github配置

對應項目->settings->Webhooks->add webhook:
Payload URL = http://userID:apiToken@182.61.59.000:8080/job/webhelloworld/build?token=hahaha
userID,apiToken爲上面Jenkins的userID,apiToken的值
182.61.59.000:8080爲Jenkins的IP:端口
WebHelloWorld爲Jenkins的項目名
hahaha爲上面Jenkins設置的身份令牌

分享一波阿里雲代金券快速上雲



持續入坑


參考來自
使用Docker構建持續集成與自動部署的Docker集羣
Running Docker in Jenkins (in Docker)


轉載請註明 from tomsun28

相關文章
相關標籤/搜索