docker學習筆記

2021-02-16 程序猿社
docker學習筆記1 docker環境安裝1.1 安裝yum-utils
   yum install -y yum-utils device-mapper-persistent-data lvm2

1.2 為yum源添加docker倉庫位置
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

1.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.7

3.2 列出運行中的容器3.3 列出所有的容器3.4 停止容器
 docker stop containerName(containerId)

   例如:docker stop mysql or docker stop b417ac5a44b0

3.5 強制停止所有的容器
  docker kill containerName(containerId) 

      例如:docker kill mysql or docker kill b417ac5a44b0

3.6 啟動停止的容器
 docker start containerName(container)

    例如:docker start mysql docker start b417ac5a44b0

3.7 進入容器

•先查詢出容器的pid

   docker inspect --format "{{.State.Pid}}" $ContainerName(或者$ContainerId)

•根據容器的pid進入容器


 nsenter --target 11239  --mount --uts --ipc --net --pid

3.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 $ContainerName

4.2 啟動容器時指定時區
  docker run -p 80:80 --name nginx \ -e TZ="Asia/Shanghai" \ -d nginx:1.17.0

4.3 在宿主機查看docker容器 cpu,內存,網絡,io使用情況

•查看指定容器情況

    docker stats  containerName(containerId)

•查看所有容器情況 docker stats -a

•查看docker 磁碟使用情況

4.4 進入docker容器內部的bash
  docker exec -it $ContainerName /bin/bash

•使用root帳戶進入docker容器內部的bash

    docker exec -it --user root $ContainerName /bin/bash

4.5 創建外部網絡
 docker network create -d bridge my-bridge-network

4.6 修改docker鏡像存放的位置

•查看docker鏡像存放的位置

 docker info | grep "Docker Root Dir"

•關閉docker服務

•移動目錄到目標路徑

  mv /var/lib/docker /mydata/docker

•建立軟連結

   ln -s /mydata/docker /var/lib/docker

4 使用Dockerfile為SpringBoot應用構建Docker鏡像4.1 Dockfile常用指令ADD: 用於複製文件,格式: ADD <Src> <DEST>
    ADD  springboot.jar /springboot.jar

ENTRYPOINT :  指定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 root

EXPOSE:  聲明需要暴露的埠(只聲明不會打開埠),格式:EXPOSE <port1> <port2> ...
  #聲明服務運行在8080埠   EXPOSE 8080

FROM: 指定所需依賴的基礎鏡像,格式: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-SNAPSHOT

5 使用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.service

 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

  ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

5.2.2 讓docker支持http上傳鏡像
  echo '{ "insecure-registries":["192.168.3.101:5000"] }' > /etc/docker/daemon.json

5.2.3 修改配置後需要使用如下命令使配置生效5.2.4 重新啟動Docker服務
     systemctl stop docker systemctl start docker

5.2.5 開啟防火牆的Docker構建埠
     firewall-cmd --zone=public --add-port=2375/tcp --permanent firewall-cmd --reload

5.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: root

5.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 --reload

6 使用Docker Compose部署SpringBoot應用

Docker Compose是一個用於定義和運行多個docker容器應用的工具。使用Compose你可以用YAML文件來配置你的應用服務,然後使用一個命令,你就可以部署你配置的所有服務了。

6.1 安裝docker compose6.1.1 下載docker compose
   curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

6.1.2 修改該文件的權限為可執行
   chmod +x /usr/local/bin/docker-compose

6.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.7

container_name
 # 容器名稱為mysql   container_name: mysql

Ports
  # 將宿主機的3306埠映射到容器的3306埠        ports:           - 3306:3306

volumes
            將宿主機的文件或目錄掛載到容器中(HOST:CONTAINER)

    # 將外部文件掛載到myql容器中     volumes:        - /mydata/mysql/log:/var/log/mysql        - /mydata/mysql/data:/var/lib/mysql        - /mydata/mysql/conf:/etc/mysql

environment
 # 設置mysqlroot帳號密碼的環境變量  environment:      - MYSQL_ROOT_PASSWORD=root

links
   #可以以database為域名訪問服務名稱為db的容器    links:       - db:database

6.3 Docker Compose常用命令6.3.1 構建、創建、啟動相關容器
# -d表示在後臺運行docker-compose up -d

6.3.2 指定文件啟動
docker-compose -f docker-compose.yml up -dCopy to clipboardErrorCopied

6.3.3 停止所有相關容器
docker-compose stopCopy to clipboardErrorCopied

6.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/logs

6.4.2 使用maven插件構建douyin鏡像
         ![image-20200811140237058](docker學習筆記.assets/image-20200811140237058.png)

6.4.3 運行Docker Compose命令啟動所有服務
       先將docker-compose.yml上傳至Linux伺服器,再在當前目錄下運行如下命令:

相關焦點

  • 【20210109】Docker學習筆記
    安裝Docker3.1 安裝使用yum安裝docker3.2 驗證輸入命令[root@tfdev ~]# docker -vDocker version 1.13.1, build 0be3e21/1.13.13.3 啟動關閉SELinux,這玩意和docker合不來打開selinux的配置文件
  • Docker超詳細學習筆記
    大家好,我是java時光,以下是我吐血總結的Docker學習文檔,有詳細的案例,可以達到更好的學習效果!
  • 經驗總結 | Docker 使用筆記
    /docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composedocker-compose --version3、Docker 設置國內鏡像源
  • 【長篇博文】Docker學習筆記與深度學習環境的搭建和部署(一)
    docker學習筆記    0.2 Docker架構1 註冊、登錄、
  • Docker實戰學習筆記(附源碼)
    docker stop [容器名稱|容器ID]docker restart [容器名稱|容器ID]docker logs [容器名稱|容器ID]docker psdocker create nginx容器中執行命令docker exec [容器名稱|容器ID] 命令docker run ‐d ‐‐name namespaceA busybox
  • 我的Docker學習筆記(基礎篇)
    為什麼要學習docker我學習docker主要是因為Go,也是為了更好的實現devops的橋接,隨著caas平臺的推進,和打包即應用的快速部署等吸引所驅使。安裝 docker-io febootstrap(febootstrap用來製作centos鏡像的工具) yum install docker-io febootstrap -y redhat a.
  • Docker學習筆記(二)——Docker安裝
    複製代碼Step 4.2: 安裝指定版本的Docker-CE: (把下面VERSION改成指定版本即可)sudo apt-get -y install docker-ce=[VERSION]複製代碼Step 5: 查看docker是否啟動systemctl status docker複製代碼
  • 【長篇博文】Docker學習筆記(三):鏡像的分層、打包、雙向綁定、導入導出、Dockerfile的構建、部署與發布
    本文原文請去請去我的CSDN查看:https://blog.csdn.net/weixin_41194129/category_10210023.html長篇博文記錄學習流程不容易,請關注、轉發、點讚、評論,謝謝!
  • Docker實戰筆記
    此Docker系列學習筆記,根據Reboot教育 (http://www.51reboot.com/)PC大神的運維自動化部分課程整理而成
  • Docker學習之Dockerfile詳解
    上一篇學習了docker的基礎,知道docker有三大概念,鏡像,容器和倉庫。使用第三方鏡像不是學習docker的最終目的,最想要的還是要自己構建鏡像。    將自己的程序、文件、環境等構建成自己想要的應用鏡像、方便後續部署、啟動、維護。
  • Docker學習筆記-基礎命令三
    刪除鏡像 docker image rm [OPTIONS] IMAGE [IMAGE...]rm批量刪除docker rmi $(docker images -f "xxxx=xxx" -q)清理未使用的鏡像 docker
  • Kubernetes全棧架構師(Docker基礎)--學習筆記
    Built and Updates Daily!RUN useradd mingsonzheng && /opt/mingsonzheng這樣docker的層級會少一層,存儲大小會小一點CMD:啟動容器默認執行的命令[root@k8s-master01 dockerfiles]# vim Dockerfile # 修改為以下內容FROM centos:8
  • 繼續玩NAS——為知筆記docker私有部署升級
    在上次講解自己的NAS使用文章中提到了自己部署了一個docker版的為知筆記來使用,其實部署好之後也是偶爾用用,中途還更換嘗試了其他筆記工具。
  • docker筆記
    安裝  yum list | grep docker  yum install docker   或者   curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 以 centOS 為例
  • 學習筆記:Docker之Redis集群部署
    二、創建網卡# 創建網卡[root@VM-0-16-centos docker]# docker network create redis --subnet 172.38.0.0/16cec06297b4a0284e0a822226f77f00f8c788ed7f4e5ead2b745bf929c4b9cf39[root@VM-0-16-centos docker]# docker network lsNETWORK ID     NAME      DRIVER    SCOPE65e8a28b2597
  • 【Docker 系列】docker 學習 二,Docker 的常用命令
    【Docker 系列】docker 學習 二,Docker 的常用命令基本幫助命令# 查看 docker 的基本版本信息docker version# 查看 docker 的系統信息,如鏡像和容器數量docker info# 查看某個命令的幫助docker xx命令 --help
  • 應用異常監控利器 Sentry 搭建與學習筆記(修正版)
    redis2.docker run -d --name sentry-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=sentry postgres3.docker run --rm sentry config generate-secret-key這一步會生成一個密鑰key,比如 *l%)ti9=v4.docker run -it --
  • Docker學習之docker-compose詳解
    通過前面兩篇的學習,我們可以通過 Dockerfile 文件讓用戶很方便的定義一個單獨的應用容器。然後,在日常工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。# 前臺啟動docker-compose up# 後臺啟動docker-compose up -d# -f 指定使用的 Compose 模板文件,默認為 docker-compose.yml,可以多次指定,指定多個 ymldocker-compose -f docker-compose.yml up
  • Docker垃圾清理
    在docker 1.13版本之後,提供了對各種對象的prune命令,也提供了清理所有對象類型的docker system prune命令。但在docker 1.13之前的版本,則需要提供其他方式進行垃圾清理。2、垃圾清理2.1 docker v1.13之後版本的垃圾清理2.1.1 容器在停止容器時,系統並不會知道刪除這個容器,除非在運行此容器時設置了–rm欄位。
  • 免費學習 Docker 的最佳方法:Play-with-docker(PWD)
    去年在柏林的分布式系統峰會上,Docker 的負責人 Marcos Nils[1] 和 Jonathan Leibiusky[2] 宣稱已經開始研究瀏覽器內置 Docker 的方案,幫助人們學習