BKivdvfg3A(csyFLMUoMF8%5($U1IWcp
一.安裝Docker
有內(nèi)核版本要求 大于等于3.10 以Centos7為例
1.1 移除舊的版本:
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
1.2 安裝一些必要的系統(tǒng)工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
1.3 添加軟件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.4 更新 yum 緩存:
sudo yum makecache fast
1.5 安裝 Docker-ce:
sudo yum -y install docker-ce
1.6 啟動 Docker 后臺服務(wù)
sudo systemctl start docker
)
二.Docker基本命令
2.1 查看所有運行中鏡像
docker ps
2.2 查看指定鏡像輸出
docker logs [id | name]
2.3 停止指定鏡像
docker stop [id | name]
2.4 加載指定鏡像
docker run <image> <cmd>
2.5 更多命令請查看命令幫助
docker --help
docker <command> --help
三.Dockerfile語法
Dockerfile可以分為四部分
- 基礎(chǔ)鏡像信息
- 創(chuàng)建者信息
- 鏡像操作指令
- 啟動執(zhí)行指令
3.1 基礎(chǔ)鏡像信息
//FROM <image>[:<tag>] 基于指定鏡像創(chuàng)建
FROM openjdk
3.2 創(chuàng)建者信息
MAINTAINER baojizhong 指定創(chuàng)建者信息
3.3 鏡像操作指令
3.3.1 兩種格式
- exec格式 ["sh","-c","echo","world"] 以下寫作["command"]
- shell格式 sh -c echo world 以下寫作<command>
區(qū)別: exec格式的命令不會調(diào)用任何shell途蒋,不會進(jìn)行變量替換抓韩。
下面的命令大部分都同時支持這兩種格式
3.3.2 USER命令
USER命令可以指定啟動容器時的用戶 默認(rèn)是root
USER deamon // 指定用戶為daemon
通常需要首先建立用戶 使用RUN命令
3.3.3 RUN命令
RUN命令可以執(zhí)行任何基礎(chǔ)鏡像支持的命令
RUN <command>
RUN ["command"]
// 建立用戶
RUN useradd lavi2510
RUN echo "lavi2510:0DayYouK" | chpasswd
3.3.4 CMD命令
CMD命令是在容器啟動時執(zhí)行的命令 只有最后一條生效 且會被docker run命令中的參數(shù)覆蓋
CMD <commad>
CMD ["command"]
// 多條CMD只有最后一條生效
CMD echo "hello"
CMD echo "world"
3.3.5 ENTRYPOINT命令
ENTRYPOINT命令是在容器啟動時的命令彼宠,只有最后一條生效上祈,不會被docker run命令中的參數(shù)覆蓋 而是會將run命令或CMD ["command"]中的參數(shù)接在ENTRYPOINT命令后作為ENTRYPOINT命令的參數(shù)
ENTRYPOINT <command>
ENTRYPOINT ["command"]
// 多條ENTRYPOINT只有最后一條生效
// run命令和CMD ["command"]都會為ENTRYPOINT命令提供參數(shù) 如下
CMD ["test"]
ENTRYPOINT echo
// 啟動時實際執(zhí)行為echo test
3.3.6 EXPOSE命令
EXPOSE命令可以指定要暴露的端口
EXPOSE <port> [<port> ...]
EXPOSE 8081 8082 需要暴露8081,8082端口
3.3.7 ENV命令
ENV命令可以指定環(huán)境變量嘁酿,可以被RUN指令獲取鸡捐,在容器運行時存在
ENV <key> <value>
ENV JAVA_HOME /usr/local/java
3.3.8 ADD命令
ADD命令可以將指定的目錄或文件(也可以是一個URL)拷貝到容器的指定目錄下 如果是tar.gz會自動解壓
ADD <src> <dest>
ADD docker-0.0.1.jar /home/lavi2510/lavi.jar
3.3.9 COPY命令
COPY命令相較于ADD命令,只能從本地拷貝宁脊,并且不會解壓。如果以本地文件為目標(biāo)贤姆,推薦使用COPY
COPY <src> <dest>
COPY docker-0.0.1.jar /home/lavi2510/lavi.jar
3.3.10 VOLUME命令
VOLUME命令會創(chuàng)建一個匿名VOLUME榆苞,將容器中的目錄和host machine的某個目錄綁定
VOLUME /lavi // 將容器中的/lavi目錄綁定于host machine的某個目錄
VOLUME my-volume:/lavi // 將容器中的/lavi目錄與my-volume對應(yīng)的目錄綁定
3.3.11 WORKDIR命令
WORKDIR命令可以指定工作目錄
WORKDIR /path/to/workdir
四.啟動一個SpringBoot項目
dockerfile
FROM openjdk
MAINTAINER baojizhong
ENV JAVA_HOME /usr/local/java
ADD proxy-service-kafka-1.0.0.jar /home/proxy.jar
WORKDIR /home
EXPOSE 8000
ENTRYPOINT ["java","-jar","/home/proxy.jar"]
將dockerfile和proxy-service-kafka-1.0.0.jar放在同一目錄下
編譯鏡像
docker build -t proxy/kafka .
創(chuàng)建鏡像
docker run -p 0.0.0.0:8000:8000 --name proxy proxy/kafka --spring.profiles.active=dev --registry.host=10.90.101.43 --registry.port=8000 --proxy.type=producer