移除已安裝的docker(docker之前被稱爲docker或者docker-enginer如今稱爲docker-ce)java
apt-get remove docker docker-engine docker.io docker-ce rm -rf /var/lib/docker/
rm -rf /etc/docker/
更新APT包linux
sudo apt-get update
安裝包以容許APT在HTTPS上使用存儲庫spring
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common
配置阿里雲的apt源docker
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/debian \
$(lsb_release -cs) \ stable"
更新APT包vim
sudo apt-get update
安裝最新的docker cespringboot
sudo apt-get install docker-ce
若是須要安裝特定版本的docker cebash
apt-cache madison docker-ce #查看可安裝版本 sudo apt-get install docker-ce=<VERSION_STRING> #替代值爲第二列的版本號
查看docker狀態啓動結果,Active爲active(running)狀態網絡
systemctl status docker.service
可能出現安裝失敗,active狀態爲stop,經過查看/var/log/daemon.log,日誌:Error starting daemon: Error initializing network controller: list bridge addresses failed: no available network,解決方法:app
apt-get install bridge-utils brctl addbr docker0 ifconfig docker0 192.168.2.1
echo 'DOCKER_OPTS="b=docker0"' >> /etc/default/docker
經過hello-world鏡像來驗證docker是否安裝成功,若是下圖所示即爲安裝成功curl
docker run hello-world
添加相關pom依賴後,建立HelloController便攜代碼:
@RestController public class HelloController { @GetMapping("/hello") @ResponseBody public String hello(String name) { return "Hello world!"; } }
pom中配置maven插件後,經過mvn命令導出jar,導出文件在工程的target目錄中:
mvn clean package
建立Dockerfile,最好是空目錄,注意文件大小寫
touch Dockerfile
#Dockerfile的內容 #指定基礎鏡像 FROM openjdk:8 RUN apt-get update \ #安裝基礎工具 && apt-get install -y --no-install-recommends locales net-tools iputils-ping curl wget telnet vim tzdata \ #設置語言環境 && locale-gen en_US.UTF-8 \ #設置時區,docker中默認使用UTC時間 && echo "Asia/Shanghai" > /etc/timezone \ && rm /etc/localtime \ #從新配置tzdata軟件包,使得時區設置生效 && dpkg-reconfigure -f noninteractive tzdata #指定維護者信息,可不寫 MAINTAINER yehx 582097515@qq.com #容器工做目錄,run -it進入docker後CD進入改目錄 WORKDIR /app #指定標籤信息,可不寫 LABEL app="springboot-helloworld" version="1.0" by="yehx" #COPY工程的jar文件,會自動解壓 ADD ../springboot-helloworld-1.0-SNAPSHOT.jar ./ #打開某個端口 EXPOSE 8181 #容器啓動後須要執行的命令 CMD java -jar springboot-helloworld-1.0-SNAPSHOT.jar
製做鏡像(最後. 表明當前路徑)
docker build -t springboot-helloworld:1.0 .
查看鏡像,能夠看到剛剛製做好的鏡像文件
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE springboot-helloworld 1.0 7484da556931 10 hours ago 660MB
運行鏡像
#-p 8181:8181指定端口映射,讓外部也能夠訪問這些應用,若是不用-p,能夠經過--network host,將container與宿主機的網絡相連通 #--name指定運行後的容器名稱 #-d
docker run -d -p 8181:8181 --name springboot-helloworld springboot-helloworld:1.0
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 833c1354f668 springboot-helloworld:1.0 "/bin/sh -c 'java -j…" 10 hours ago Up 10 hours 0.0.0.0:8181->8181/tcp springboot-helloworld
查看鏡像運行日誌
docker logs -f 833c1354f668
訪問/hello接口

目前Docker官方維護了一個公共倉庫叫Docker Hub,大部分需求均可以經過在Docker Hub中直接下載鏡像來實現,並能夠上傳本身的鏡像文件。
查詢鏡像:經過 docker search 命令來查找官方倉庫中的鏡像

拉取鏡像:利用 docker pull 命令來將它下載到本地

推送鏡像:能夠在登陸後經過 docker push 命令來將本身的鏡像推送到 Docker Hub
這邊須要注意的是,推送前須要經過docker tag命令將鏡像從新打標籤,若是Docker Hub的帳號用戶名爲usernamme,則新鏡像名爲username/[old-image]