yum install -y yum-utils device-mapper-persistent-data lvm21.2 為yum源添加docker倉庫位置yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo1.3 安裝docker1.4 啟動docker2 docker鏡像常用命令2.1 搜索鏡像2.2 查找鏡像支持的版本進入docker hub的官網,地址為:[https://hub.docker.com](https://hub.docker.com/),然後搜索需要的鏡像2.3 下載鏡像2.4 列出鏡像2.5 刪除鏡像•指定名稱刪除鏡像:
```bash docker rmi mysql:5.7 ```•指定名稱刪除鏡像(強制):
•刪除所有沒有引用的鏡像
docker rmi $(docker images | grep none | awk '{print $3}')•強制刪除所有的鏡像
docker rmi -f $(docker images)3 Docker容器常用命令3.1 新建並啟動容器docker run -p 3306:3306 --name mysql -d mysql:5.73.2 列出運行中的容器3.3 列出所有的容器3.4 停止容器docker stop containerName(containerId)例如:docker stop mysql or docker stop b417ac5a44b03.5 強制停止所有的容器docker kill containerName(containerId)例如:docker kill mysql or docker kill b417ac5a44b03.6 啟動停止的容器docker start containerName(container)例如:docker start mysql docker start b417ac5a44b03.7 進入容器•先查詢出容器的pid
docker inspect --format "{{.State.Pid}}" $ContainerName(或者$ContainerId)•根據容器的pid進入容器
nsenter --target 11239 --mount --uts --ipc --net --pid3.8 刪除容器•刪除指定容器
docker rm $ContainerName(或者$ContainerId)•按名稱刪除容器
docker rm `docker ps -a | grep mysql* | awk '{print $1}'`•強制刪除所有的容器
docker rm -f $(docker ps -a -q)3.9 查看容器的日誌•查看當前容器日誌
docker logs containerName(containerId)•動態查看當前容器日誌
docker logs containerName(containerId) -f4.0 查看容器的ip地址docker inspect --format '{{ .NetworkSettings.IPAddress }}' containerName(containerId)4.1 修改容器的啟動方法docker container update --restart=always $ContainerName4.2 啟動容器時指定時區docker run -p 80:80 --name nginx \ -e TZ="Asia/Shanghai" \ -d nginx:1.17.04.3 在宿主機查看docker容器 cpu,內存,網絡,io使用情況•查看指定容器情況
docker stats containerName(containerId)•
•查看所有容器情況 docker stats -a
•查看docker 磁碟使用情況
4.4 進入docker容器內部的bashdocker exec -it $ContainerName /bin/bash•使用root帳戶進入docker容器內部的bash
docker exec -it --user root $ContainerName /bin/bash4.5 創建外部網絡docker network create -d bridge my-bridge-network4.6 修改docker鏡像存放的位置•查看docker鏡像存放的位置
docker info | grep "Docker Root Dir"•關閉docker服務
•移動目錄到目標路徑
mv /var/lib/docker /mydata/docker•建立軟連結
ln -s /mydata/docker /var/lib/docker4 使用Dockerfile為SpringBoot應用構建Docker鏡像4.1 Dockfile常用指令ADD: 用於複製文件,格式: ADD <Src> <DEST>ADD springboot.jar /springboot.jarENTRYPOINT : 指定docker容器啟動時執行的命令,格式:ENTRYPOINT ["executable", "param1","param2"]#指定docker容器啟動時運行jar包 ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]ENV: 用於設置環境變量,格式:ENV <key> <value># mysql運行時設置root密碼 ENV MYSQL_ROOT_PASSWORD rootEXPOSE: 聲明需要暴露的埠(只聲明不會打開埠),格式:EXPOSE <port1> <port2> ...#聲明服務運行在8080埠 EXPOSE 8080FROM: 指定所需依賴的基礎鏡像,格式:FROM <image>:<tag># 該鏡像需要依賴的java8的鏡像FROM java:8 MAINTAINER: 指定維護者的名字,格式:MAINTAINER <name> RUN: RUN <command> RUN ["executable", "param1","param2"...]#在容器構建過程中需要在/目錄下創建一個mall-tiny-docker-file.jar文件
RUN bash -c 'touch /mall-tiny-docker-file.jar'4.2 編寫DOCKfile文件•在springboot項目裡新建一個Dockerfile文件
# 該鏡像需要依賴的基礎鏡像FROM java:8# 將當前目錄下的jar包複製到docker容器的/目錄下ADD douyin-1.0-SNAPSHOT.jar /douyin-1.0-SNAPSHOT.jar# 運行過程中創建一個douyin-1.0-SNAPSHOT.jar文件RUN bash -c 'touch /douyin-1.0-SNAPSHOT.jar'# 聲明服務運行在8080埠EXPOSE 8080# 指定docker容器啟動時運行jar包ENTRYPOINT ["java", "-jar","/douyin-1.0-SNAPSHOT.jar"]# 指定維護者的名字MAINTAINER zhaozuowen•使用maven打包應用
image-202008101803273434.3 將應用jar包及Dockerfile文件上傳到linux伺服器:4.4 在linux上構建docker鏡像# -t 表示指定鏡像倉庫名稱/鏡像名稱:鏡像標籤 .表示使用當前目錄下的 Dockerfile docker build -t mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT .4.5 運行應用docker run -p 8080:8080 --name douyin \
-v /etc/localtime:/etc/localtime \-v /mydata/app/dockfile/logs:/var/logs \-d wenzi/douyin:1.0-SNAPSHOT5 使用maven插件為springboot應用構建docker鏡像5.1 DOCKER REGISTER構建DOCKER REGISTER 2.0搭建docker run -d -p 5000:5000 --restart=always --name registry2 registry:2如果遇到鏡像下載不下來的情況,需要修改 /etc/docker/daemon.json 文件並添加上 registry-mirrors 鍵值,然後重啟docker服務:
{ "registry-mirrors": ["https://registry.docker-cn.com"] }5.2 DOCKER開啟遠程api5.2.1 用vim編輯器修改docker.service文件vi /usr/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock5.2.2 讓docker支持http上傳鏡像echo '{ "insecure-registries":["192.168.3.101:5000"] }' > /etc/docker/daemon.json5.2.3 修改配置後需要使用如下命令使配置生效5.2.4 重新啟動Docker服務systemctl stop docker systemctl start docker5.2.5 開啟防火牆的Docker構建埠firewall-cmd --zone=public --add-port=2375/tcp --permanent firewall-cmd --reload5.3 使用maven構建docker鏡像5.3.1 在應用的pom.xml文件中添加docker-maven-plugin的依賴<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.1.0</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <imageName>wenzi/${project.artifactId}:${project.version}</imageName> <dockerHost>http://192.168.0.100:2375</dockerHost> <baseImage>java:8</baseImage> <entryPoint>["java", "-jar","/${project.build.finalName}.jar"] </entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration></plugin>相關配置說明:
•executions.execution.phase:此處配置了在maven打包應用時構建docker鏡像;•imageName:用於指定鏡像名稱,wenzi是倉庫名稱,${project.artifactId}為鏡像名稱,${project.version}為倉庫名稱;•dockerHost:打包後上傳到的docker伺服器地址;•baseImage:該應用所依賴的基礎鏡像,此處為java;•entryPoint:docker容器啟動時執行的命令;•resources.resource.targetPath:將打包後的資源文件複製到該目錄;•resources.resource.directory:需要複製的文件所在目錄,maven打包的應用jar包保存在target目錄下面;•resources.resource.include:需要複製的文件,打包好的應用jar包。
5.3.2 修改application.yml,將localhost改為db可以把docker中的容器看作獨立的虛擬機,應用訪問localhost自然會訪問不到mysql,docker容器之間可以通過指定好的服務名稱db進行訪問,至於db這個名稱可以在運行應用容器的時候指定。
spring: datasource: url: jdbc:mysql://db:3306/douyin?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root5.3.3 使用IDEA打包項目並構建鏡像注意:依賴的基礎鏡像需要先行下載,否則會出現構建鏡像超時的情況,比如我本地並沒有java8的鏡像,就需要先把鏡像pull下來,再用maven插件進行構建。
執行maven的package命令:
5.4 運行douyin項目5.4.1 啟動mysql服務使用docker命令啟動:• docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
•進入運行mysql的docker容器:
docker exec -it mysql /bin/bash•使用mysql命令打開客戶端:
mysql -uroot -proot --default-character-set=utf8•修改root帳號的權限,使得任何ip都能訪問:
grant all privileges on *.* to 'root'@'%'•創建douyin資料庫:
create database douyin character set utf8•將douyin.sql文件拷貝到douyin容器的/目錄下:
docker cp /mydata/douyin.sql mysql:/•將sql文件導入到資料庫:
use douyin;source /douyin.sql;5.4.2 啟動應用•使用docker命令啟動(--link表示應用可以用db這個域名訪問mysql服務):
docker run -p 8080:8080 --name douyin \ --link mysql:db \ -v /etc/localtime:/etc/localtime \ -v /mydata/app/docker/logs:/var/logs \ -d wenzi/douyin:1.0.0-SNAPSHOT•開啟8080埠:
firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload6 使用Docker Compose部署SpringBoot應用Docker Compose是一個用於定義和運行多個docker容器應用的工具。使用Compose你可以用YAML文件來配置你的應用服務,然後使用一個命令,你就可以部署你配置的所有服務了。
6.1 安裝docker compose6.1.1 下載docker composecurl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose6.1.2 修改該文件的權限為可執行chmod +x /usr/local/bin/docker-compose6.1.3查看是否已經安裝成功6.1.4 使用Docker Compose的步驟•使用Dockerfile定義應用程式環境,一般需要修改初始鏡像行為時才需要使用;•使用docker-compose.yml定義需要部署的應用程式服務,以便執行腳本一次性部署;•使用docker-compose up命令將所有應用服務一次性部署起來。
6.2 docker-compose.yml常用命令Image# 運行的是mysql5.7的鏡像 image: mysql:5.7container_name# 容器名稱為mysql container_name: mysqlPorts# 將宿主機的3306埠映射到容器的3306埠 ports: - 3306:3306volumes將宿主機的文件或目錄掛載到容器中(HOST:CONTAINER)# 將外部文件掛載到myql容器中 volumes: - /mydata/mysql/log:/var/log/mysql - /mydata/mysql/data:/var/lib/mysql - /mydata/mysql/conf:/etc/mysqlenvironment# 設置mysqlroot帳號密碼的環境變量 environment: - MYSQL_ROOT_PASSWORD=rootlinks#可以以database為域名訪問服務名稱為db的容器 links: - db:database6.3 Docker Compose常用命令6.3.1 構建、創建、啟動相關容器# -d表示在後臺運行docker-compose up -d6.3.2 指定文件啟動docker-compose -f docker-compose.yml up -dCopy to clipboardErrorCopied6.3.3 停止所有相關容器docker-compose stopCopy to clipboardErrorCopied6.3.4 列出所有容器信息6.4 使用Docker Compose 部署應用6.4.1 編寫docker-compose.yml文件Docker Compose將所管理的容器分為三層,工程、服務及容器。docker-compose.yml中定義所有服務組成了一個工程,services節點下即為服務,服務之下為容器。容器與容器之間可以以服務名稱為域名進行訪問,比如在mall-tiny-docker-compose服務中可以通過jdbc這個地址來訪問db這個mysql服務。
version: '3'services: # 指定服務名稱 db: # 指定服務使用的鏡像 image: mysql:5.7 # 指定容器名稱 container_name: mysql # 指定服務運行的埠 ports: - 3306:3306 # 指定容器中需要掛載的文件 volumes: - /mydata/mysql/log:/var/log/mysql - /mydata/mysql/data:/var/lib/mysql - /mydata/mysql/conf:/etc/mysql # 指定容器的環境變量 environment: - MYSQL_ROOT_PASSWORD=root # 指定服務名稱 douyin-docker-compose: # 指定服務使用的鏡像 image: wenzi/douyin:1.0-SNAPSHOT # 指定容器名稱 container_name: douyin # 指定服務運行的埠 ports: - 8080:8080 # 指定容器中需要掛載的文件 volumes: - /etc/localtime:/etc/localtime - /mydata/app/docker-compose/logs:/var/logs6.4.2 使用maven插件構建douyin鏡像6.4.3 運行Docker Compose命令啟動所有服務先將docker-compose.yml上傳至Linux伺服器,再在當前目錄下運行如下命令: