日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker容器引擎

發布時間:2024/3/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker容器引擎 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、概述
    • 1. Docker能解決的問題
    • 2. Docker思想
    • 3. Docker為什么這么火?(作用)
    • 4. 底層
    • 5. 官網和文檔
    • 6. 基本組成(圖解)
    • 7. 核心概念(名詞)
    • 10. Docker工作流程
  • 二、安裝
    • 1. 環境準備
      • Linux服務器+CentOS7+遠程連接工具
      • 環境查看命令
    • 2. 安裝步驟
      • 1、卸載舊版本
      • 2、需要的安裝包
      • 3、設置鏡像的倉庫
      • 4、安裝Docker引擎
      • 5、啟動Docker
      • 6、測試是否啟動
      • 7、運行 hello-world 映像來驗證是否正確安裝了Docker Engine
      • 8、查看運行的鏡像
      • 9、阿里云服務器配置鏡像加速器
  • 三、卸載
    • 1. 卸載Docker Engine,CLI和Containerd軟件包
    • 2. 主機上的映像,容器,卷或自定義配置文件不會自動刪除。要刪除所有圖像,容器和卷
  • 四、命令
    • 1. 幫助命令
      • docker version(顯示Docker版本信息)
      • docker info(顯示Docker的系統信息 包括鏡像和容器的數量)
      • docker --help(幫助命令)
      • docker images --help(顯示該命令的幫助信息)
    • 2. 鏡像命令
      • docker images(查詢容器所有的鏡像)
      • docker search(搜索鏡像)
      • docker pull(下載鏡像)
      • docker rmi(刪除鏡像)
    • 3. 容器命令
      • docker run(新建容器并啟動)
      • (退出容器)
      • docker ps(查看當前正在運行的容器)
      • docker rm (刪除容器)
      • (啟動和停止容器)
      • docker logs(查看日志)
      • docker top(查看正在運行的容器內部的進程信息)
      • docker inspect(查看鏡像的元數據)
      • (進入當前正在運行的容器)
      • (從容器內 拷貝文件到 主機上)
      • (從宿主機 拷貝文件到 容器中)
    • 4. 命令圖解
    • 5. 命令實戰
      • 安裝運行Nginx容器
      • 安裝運行Tomcat容器
      • 安裝運行MySQL8.0容器
  • 五、鏡像
    • 1. 概念
    • 2. 作用
    • 3. 如何得到鏡像?
    • 4. 鏡像原理
      • UnionFS(聯合文件系統)
      • 鏡像加載原理
      • 分層原理(Layers)
    • 5. 提交鏡像
  • 六、容器數據卷
  • 七、DockerFile
  • 八、IDEA整合Docker
  • 九、Docker網絡
  • 十、Docker集群
  • 十一、Docker集群管理
  • 十二、Docker持續化部署

一、概述

1. Docker能解決的問題

統一開發和運維的環境

開發和測試的日常對話:我在我電腦上可以運行~!
一款產品:開發到部署,是兩個環境 存在環境的問題?
開發在Windows 發布在Linux…(環境差別很大,而且安裝配置麻煩,深有體會~!)

2. Docker思想

  • 集裝箱
  • 隔離機制

3. Docker為什么這么火?(作用)

  • 十分輕巧(相比于虛擬機)
    他不是一臺完整的帶操作系統的電腦,只是最核心的環境,其他系統和外部硬件共用宿主的
  • 應用更快速的交付和部署
    傳統:一堆幫助文檔,配置環境,安裝程序
    Docker:打包(帶應用的運行環境)鏡像發布、測試,一鍵運行
  • 更便捷的升級和擴容
    使用了Docker之后,部署應用和搭積木一樣
    項目打包為一個鏡像,要擴展服務 只需在服務器上運行即可(服務器A、服務器B … …)
  • 更簡單的系統運維
    使用了Docker之后,我們開發、測試、運維的環境是高度一致的
  • 更高效的計算機資源利用
    Docker是內核級別的虛擬機,可以在一個物理機上運行很多的容器實例!
    服務器的性能可以被壓榨到極致!

4. 底層

基于Go語言開發的

5. 官網和文檔

官網地址
文檔地址

6. 基本組成(圖解)

7. 核心概念(名詞)

  • 鏡像(image)
    Docker鏡像好比一個模板,通過這個模板可以創建容器服務。

Tomcat鏡像 --> run --> Tomcat01容器(提供服務)

????通過這個模板可以創建多個容器。

Tomcat鏡像 --> run --> Tomcat02容器(提供服務)

  • 容器(container)
    Docker利用容器技術,獨立運行一個或一組應用,這些應用是通過鏡像來創建的

  • 倉庫(repository)

    • 公有倉庫 - 默認倉庫是國外的
      我們可以 配置 阿里云的Docker倉庫(鏡像加速)
    • 私有倉庫

10. Docker工作流程

Docker是一個Client-Server結構的系統,Docker的守護進程運行在主機上。
通過Socket從客戶端訪問!
DockerServer接收到DockerClient的指令,就會執行這個命令~!

二、安裝

1. 環境準備

  • Linux服務器+CentOS7+遠程連接工具

  • 環境查看命令

uname -r

[root@sunmmerwind ~]# uname -r 4.18.0-240.15.1.el8_3.x86_64

cat /etc/os-release

[root@sunmmerwind ~]# uname -r 4.18.0-240.15.1.el8_3.x86_64 [root@sunmmerwind ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="8" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="8" PLATFORM_ID="platform:el8" PRETTY_NAME="CentOS Linux 8" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:8" HOME_URL="https://centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-8" CENTOS_MANTISBT_PROJECT_VERSION="8"

2. 安裝步驟

1、卸載舊版本

# 直接復制粘貼 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

2、需要的安裝包

[root@sunmmerwind ~]# yum install -y yum-utils

3、設置鏡像的倉庫

  • 國外鏡像倉庫
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
  • 阿里鏡像倉庫(使用這個)
yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、安裝Docker引擎

[root@sunmmerwind ~]# yum install docker-ce docker-ce-cli containerd.io

ce:社區版
ee:企業版(收費)

5、啟動Docker

[root@sunmmerwind ~]# systemctl start docker

6、測試是否啟動

[root@sunmmerwind ~]# docker version Client: Docker Engine - CommunityVersion: 20.10.6API version: 1.41Go version: go1.13.15Git commit: 370c289Built: Fri Apr 9 22:44:36 2021OS/Arch: linux/amd64Context: defaultExperimental: trueServer: Docker Engine - CommunityEngine:Version: 20.10.6API version: 1.41 (minimum version 1.12)Go version: go1.13.15Git commit: 8728dd2Built: Fri Apr 9 22:43:02 2021OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.4.4GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8erunc:Version: 1.0.0-rc93GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdecdocker-init:Version: 0.19.0GitCommit: de40ad0

7、運行 hello-world 映像來驗證是否正確安裝了Docker Engine

[root@sunmmerwind ~]# docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world b8dfde127a29: Pull complete Digest: sha256:f2266cbfc127c960fd30e76b7c792dc23b588c0db76233517e1891a4e357d519 Status: Downloaded newer image for hello-world:latestHello from Docker! This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

8、查看運行的鏡像

[root@sunmmerwind ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d1165f221234 6 weeks ago 13.3kB [root@sunmmerwind ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 58715163d8e3 hello-world "/hello" About a minute ago Exited (0) About a minute ago wonderful_hellman

9、阿里云服務器配置鏡像加速器

1)登陸阿里云
2)在彈性計算里面 找到 容器鏡像服務
3)免費開通
4)執行下面命令就可以用了

# 創建目錄 sudo mkdir -p /etc/docker # 設置阿里云鏡像服務 帶最后的EOF sudo tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors": ["https://noi9j7o6.mirror.aliyuncs.com"] } EOF # 重新加載 sudo systemctl daemon-reload # 重啟Docker sudo systemctl restart docker

三、卸載

1. 卸載Docker Engine,CLI和Containerd軟件包

yum remove docker-ce docker-ce-cli containerd.io

2. 主機上的映像,容器,卷或自定義配置文件不會自動刪除。要刪除所有圖像,容器和卷

rm -rf /var/lib/docker

四、命令

1. 幫助命令

  • docker version(顯示Docker版本信息)

Client: Docker Engine - CommunityVersion: 19.03.12API version: 1.40Go version: go1.13.10Git commit: 48a66213feBuilt: Mon Jun 22 15:46:54 2020OS/Arch: linux/amd64Experimental: falseServer: Docker Engine - CommunityEngine:Version: 19.03.12API version: 1.40 (minimum version 1.12)Go version: go1.13.10Git commit: 48a66213feBuilt: Mon Jun 22 15:45:28 2020OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.2.13GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429runc:Version: 1.0.0-rc10GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dddocker-init:Version: 0.18.0GitCommit: fec3683
  • docker info(顯示Docker的系統信息 包括鏡像和容器的數量)

Client: Docker Engine - CommunityVersion: 19.03.12API version: 1.40Go version: go1.13.10Git commit: 48a66213feBuilt: Mon Jun 22 15:46:54 2020OS/Arch: linux/amd64Experimental: falseServer: Docker Engine - CommunityEngine:Version: 19.03.12API version: 1.40 (minimum version 1.12)Go version: go1.13.10Git commit: 48a66213feBuilt: Mon Jun 22 15:45:28 2020OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.2.13GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429runc:Version: 1.0.0-rc10GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dddocker-init:Version: 0.18.0GitCommit: fec3683 [root@iZbf2jzc4i64zvZ ~]# ^C [root@iZbf2jzc4i64zvZ ~]# clear [root@iZbf2jzc4i64zvZ ~]# docker info Client:Debug Mode: falseServer:Containers: 1Running: 0Paused: 0Stopped: 1Images: 1Server Version: 19.03.12Storage Driver: overlay2Backing Filesystem: extfsSupports d_type: trueNative Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429runc version: dc9208a3303feef5b3839f4323d9beb36df0a9ddinit version: fec3683Security Options:seccompProfile: defaultKernel Version: 3.10.0-1127.10.1.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 1.795GiBName: iZbf2jzc4i64zvZID: ML25:C7CS:I7GJ:DLJ4:E6ZC:YWOW:VXII:46RU:GUSJ:622O:ZDOG:TXN3Docker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors:https://noi9j7o6.mirror.aliyuncs.com/Live Restore Enabled: false
  • docker --help(幫助命令)

Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]List imagesOptions:-a, --all Show all images (default hides intermediate images)--digests Show digests-f, --filter filter Filter output based on conditions provided--format string Pretty-print images using a Go template--no-trunc Don't truncate output-q, --quiet Only show numeric IDs [root@iZbf2jzc4i64zvZ ~]# docker --helpUsage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersOptions:--config string Location of client config files (default "/root/.docker")-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOSTenv var and default context set with "docker context use")-D, --debug Enable debug mode-H, --host list Daemon socket(s) to connect to-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")--tls Use TLS; implied by --tlsverify--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")--tlskey string Path to TLS key file (default "/root/.docker/key.pem")--tlsverify Use TLS and verify the remote-v, --version Print version information and quitManagement Commands:builder Manage buildsconfig Manage Docker configscontainer Manage containerscontext Manage contextsengine Manage the docker engineimage Manage imagesnetwork Manage networksnode Manage Swarm nodesplugin Manage pluginssecret Manage Docker secretsservice Manage servicesstack Manage Docker stacksswarm Manage Swarmsystem Manage Dockertrust Manage trust on Docker imagesvolume Manage volumesCommands:attach Attach local standard input, output, and error streams to a running containerbuild Build an image from a Dockerfilecommit Create a new image from a container's changescp Copy files/folders between a container and the local filesystemcreate Create a new containerdiff Inspect changes to files or directories on a container's filesystemevents Get real time events from the serverexec Run a command in a running containerexport Export a container's filesystem as a tar archivehistory Show the history of an imageimages List imagesimport Import the contents from a tarball to create a filesystem imageinfo Display system-wide informationinspect Return low-level information on Docker objectskill Kill one or more running containersload Load an image from a tar archive or STDINlogin Log in to a Docker registrylogout Log out from a Docker registrylogs Fetch the logs of a containerpause Pause all processes within one or more containersport List port mappings or a specific mapping for the containerps List containerspull Pull an image or a repository from a registrypush Push an image or a repository to a registryrename Rename a containerrestart Restart one or more containersrm Remove one or more containersrmi Remove one or more imagesrun Run a command in a new containersave Save one or more images to a tar archive (streamed to STDOUT by default)search Search the Docker Hub for imagesstart Start one or more stopped containersstats Display a live stream of container(s) resource usage statisticsstop Stop one or more running containerstag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGEtop Display the running processes of a containerunpause Unpause all processes within one or more containersupdate Update configuration of one or more containersversion Show the Docker version informationwait Block until one or more containers stop, then print their exit codesRun 'docker COMMAND --help' for more information on a command.
  • docker images --help(顯示該命令的幫助信息)

Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]List imagesOptions:-a, --all Show all images (default hides intermediate images)--digests Show digests-f, --filter filter Filter output based on conditions provided--format string Pretty-print images using a Go template--no-trunc Don't truncate output-q, --quiet Only show numeric IDs

2. 鏡像命令

鏡像類似 我們所說的系統盤 O(∩_∩)O哈哈~

  • docker images(查詢容器所有的鏡像)

[root@sunmmerwind ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d1165f221234 6 weeks ago 13.3kB
  • docker search(搜索鏡像)

搜索命令

[root@sunmmerwind ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 10768 [OK] mariadb MariaDB Server is a high performing open sou… 4056 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 792 [OK] percona Percona Server is a fork of the MySQL relati… 533 [OK]

過濾搜索

[root@sunmmerwind ~]# docker search mysql --filter=stars=5000 NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 10768 [OK]
  • docker pull(下載鏡像)

[root@sunmmerwind ~]# docker pull mysql Using default tag: latest #默認下載最新版 latest: Pulling from library/mysql #下載路徑 6ec8c9369e08: Pull complete #Linux中的聯合文件系統(下載過的 不用重復下載了) 177e5de89054: Pull complete ab6ccb86eb40: Pull complete e1ee78841235: Pull complete 09cd86ccee56: Pull complete 78bea0594a44: Pull complete caf5f529ae89: Pull complete cf0fc09f046d: Pull complete 4ccd5b05a8f6: Pull complete 76d29d8de5d4: Pull complete 8077a91f5d16: Pull complete 922753e827ec: Pull complete Digest: sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14acc #簽名 Status: Downloaded newer image for mysql:latest #狀態:Downloaded 已下載 docker.io/library/mysql:latest #真實下載地址 【所以docker pull mysql 等價于 docker pull docker.io/library/mysql:latest】
  • docker rmi(刪除鏡像)

刪除全部鏡像:docker rmi -f $(docker images -aq) #$(刪除的參數)

#因為容器中只有一個了 [root@iZbf2jzc4i64zvZ ~]# docker rmi -f $(docker images -aq) Untagged: hello-world:latest Untagged: hello-world@sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202 Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b

根據鏡像ID刪除鏡像: docker rmi -f 鏡像ID

[root@iZbf2jzc4i64zvZ ~]# docker rmi -f 8679ced16d20 Untagged: mysql:5.7 Untagged: mysql@sha256:97869b42772dac5b767f4e4692434fbd5e6b86bcb8695d4feafb52b59f Deleted: sha256:8679ced16d206961b35686895b06cfafefde87ef02b518dfc2133081ebf47cda Deleted: sha256:355f87dc5125a32cc35898a4dde17fb067585bc0d86704b5a467c0ccc0eea484 Deleted: sha256:8299d5c38042216210125535adb2600e46268a0e2b9ec799d12ea5b770236e79 Deleted: sha256:07311a303b2c7cf2ac6992aaf68e12326fe7255985166939cbab7d18b10e0f47 Deleted: sha256:306c9bc1ce2997d000bb6f1ea4108420d9752df93ce39164b7a2f876b954afc4

一次刪除多個鏡像:docker rmi -f 鏡像ID 鏡像ID 鏡像ID 鏡像ID

不做示例了 ID中間加空格就行了~!

根據鏡像的名字刪除:docker rmi -f 鏡像名字

[root@iZbf2jzc4i64zvZ ~]# docker rmi -f mysql Untagged: mysql:latest Untagged: mysql@sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14 Deleted: sha256:e3fcc9e1cc046c92cfcea0d66cdb00fcb7747e87dde96dfc958bd80be37af117 Deleted: sha256:7a1c5c1a40dad78bacb211ec3d7918acdd78a76185fd33a167260c3e51e97fa4 Deleted: sha256:abb5f0f890ba2f327d30b5ca1bbc35584bc6357c8d6f4bdc2e4637cce2ea9a35 Deleted: sha256:919c56fc8230b0ddf8580e0a58d34ae1c5e48069d9b48cc41ae7a1cae82bb60e Deleted: sha256:962d6891622cf4a7e8932f6c76b2c2f3ab9cecb8aad71d55adacc2aece6b0181 Deleted: sha256:ab26019b1328bff5ea5132b5e3f52b9fd3808e734f1a39141fb9e5da561200e2 Deleted: sha256:06bd523b11319c8177ab2003cb31b296cea22b0201bf8ae987ac300118a0654f Deleted: sha256:a8681d5c66889e97303be147d30eb8ec4b0bd5bc0e2c774b4d94f52ec23c4649 Deleted: sha256:c28ab987d3964139dcd3852e1c10ef0a425d2705c71a3b68b411460279d8535d Deleted: sha256:c0fc32d1072662668dd59842d893e5ee125c1958931ae84630132b7bb6c09198 Deleted: sha256:da0ebf91b8bc2d545dbe73cbf9b7c7b25df71033f5057133a445e9c33a36ec7d Deleted: sha256:483d8f607b803b5e3d3f97adbad3b0e692670f223b2529ecae5d04888c29ad5d Deleted: sha256:95ef25a3204339de1edf47feaa00f60b5ac157a498964790c58c921494ce7ffd

3. 容器命令

容器類似我們用系統盤 做的新系統~

  • docker run(新建容器并啟動)

docker run [可選參數] image
參數說明:

–name=“Name” 設置容器名字
-d 后臺運行方式
-it 使用交互方式運行,進入容器查看內容
-p(小屁) 指定容器的端口(-p 8080:8080)
-p (ip:主機端口:容器端口)
-p (主機端口:容器端口)【常用】
-p (容器端口)
容器端口 (不寫-p)
-P 隨機指定端口

# centos 是 下載的一個鏡像 [root@iZbf2jzc4i64zvZ ~]# docker run -it centos /bin/bash # 換成鏡像ID了 [root@755709dbc6b0 /]# # centos基礎版本,很多命令不完善!ll命令就沒有~~~ [root@755709dbc6b0 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

后臺啟動命令 及 坑~~!!

#命令:docker run -d 鏡像名 [root@iZbf2jzc4i64zvZ ~]# docker run -d centos /bin/bash 27be24a0c1dda2815bc2dec8bb6efc09f81c2b6ca7a9b0380a11e6d6ef315a5b #問題docker ps,發現centos停止了~ [root@iZbf2jzc4i64zvZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@iZbf2jzc4i64zvZ ~]# #常見的坑:docker容器使用后臺運行,就必須要有一個前臺的進程,docker發現沒有應用,就會自動停止 #還有nginx,容器后臺啟動后,發現自己沒有提供服務,就會立刻停止
  • (退出容器)

  • 容器停止 并 退出容器
exit
  • 容器不停止 退出容器
Ctrl+P+Q(順序不能錯)
  • docker ps(查看當前正在運行的容器)

參數說明:

???????#?不加任何參數,只顯示當前正在運行的容器
-a ????#?查看當前正在運行的容器 + 歷史運行過的程序
-n=? ??#?顯示最近創建的容器(?代表顯示幾個)
-q ??#?顯示容器的編號(CONTAINER ID)

[root@iZbf2jzc4i64zvZ ~]# docker ps -a -n=1 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 755709dbc6b0 centos "/bin/bash" 3 hours ago Exited (0) 3 hours ago pedantic_mccarthy [root@iZbf2jzc4i64zvZ ~]# docker ps -a -n=2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 755709dbc6b0 centos "/bin/bash" 3 hours ago Exited (0) 3 hours ago pedantic_mccarthy 6b5fb686c28d bf756fb1ae65 "/hello" 35 hours ago Exited (0) 35 hours ago silly_stonebraker [root@iZbf2jzc4i64zvZ ~]# docker ps -a -n=3 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 755709dbc6b0 centos "/bin/bash" 3 hours ago Exited (0) 3 hours ago pedantic_mccarthy 6b5fb686c28d bf756fb1ae65 "/hello" 35 hours ago Exited (0) 35 hours ago silly_stonebraker

只顯示容器編號ID

[root@iZbf2jzc4i64zvZ ~]# docker ps -a -q 755709dbc6b0 6b5fb686c28d [root@iZbf2jzc4i64zvZ ~]# docker ps -aq 755709dbc6b0 6b5fb686c28d
  • docker rm (刪除容器)

  • docker rm 容器ID
[root@iZbf2jzc4i64zvZ ~]# docker rm 6b5fb686c28d 6b5fb686c28d
  • 刪除指定的容器,無論是否正在運行 -f
[root@iZbf2jzc4i64zvZ ~]# docker rm 87e99063bbbe Error response from daemon: You cannot remove a running container 87e99063bbbe. (在試圖移動或強行移動之前,請停止容器) Stop the container before attempting removal or force remove [root@iZbf2jzc4i64zvZ ~]# docker rm -f 87e99063bbbe 87e99063bbbe
  • 刪除所有的容器
[root@iZbf2jzc4i64zvZ ~]# docker rm $(docker ps -aq) de8748047921 755709dbc6b0
  • 刪除所有的容器(可通過管道符選擇刪除 xargs)
[root@iZbf2jzc4i64zvZ ~]# docker ps -a -q|xargs docker rm e5ad028987ce
  • (啟動和停止容器)

  • 啟動
docker start 容器ID
  • 重啟
docker restart 容器ID
  • 停止
docker stop 容器ID
  • 殺掉
docker kill 容器ID
  • docker logs(查看日志)

參數解釋:

-c?“”??# 引號里面是一段shell腳本
echo ?# 打印
這就解釋了為什么這次后臺運行沒停止

-tf
–tail 10 顯示日志條數(如果不加–tail會全部顯示)

[root@iZbf2jzc4i64zvZ ~]# docker run -d centos /bin/bash -c "while true;do echo SummerWind;sleep 1;done" # 這段shell腳本,意思是循環打印SummerWind c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c [root@iZbf2jzc4i64zvZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5672e9223d2 centos "/bin/bash -c 'while猞" 4 seconds ago Up 3 seconds recursing_cartwright[root@iZbf2jzc4i64zvZ ~]# docker logs -tf --tail 10 c5672e9223d2 2020-07-24T07:15:25.177771117Z SummerWind 2020-07-24T07:15:26.180032231Z SummerWind 2020-07-24T07:15:27.181983254Z SummerWind 2020-07-24T07:15:28.184071541Z SummerWind 2020-07-24T07:15:29.186062819Z SummerWind
  • docker top(查看正在運行的容器內部的進程信息)

docker top 容器ID(這要是正在運行的容器)

[root@iZbf2jzc4i64zvZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b3c259fa54b6 centos "/bin/bash -c 'while猞" About a minute ago Up About a minute hardcore_benz [root@iZbf2jzc4i64zvZ ~]# docker top b3c259fa54b6 UID PID PPID C STIME TTY TIME CMD root 17631 17615 0 15:22 ? 00:00:00 /bin/bash -c while true;do echo SummerWind;sleep 1;done root 17742 17631 0 15:23 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
  • docker inspect(查看鏡像的元數據)

[root@iZbf2jzc4i64zvZ ~]# docker inspect c5672e9223d2 [{#容器ID(這是完整的 顯示的只是前12位 ~)"Id": "c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c","Created": "2020-07-24T07:14:37.838659993Z","Path": "/bin/bash","Args": ["-c","while true;do echo SummerWind;sleep 1;done"],#容器狀態"State": {"Status": "exited","Running": false,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 0,"ExitCode": 137,"Error": "","StartedAt": "2020-07-24T07:14:38.085351505Z","FinishedAt": "2020-07-24T07:20:02.584374216Z"},"Image": "sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f","ResolvConfPath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/resolv.conf","HostnamePath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/hostname","HostsPath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/hosts","LogPath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c-json.log","Name": "/recursing_cartwright","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "default","PortBindings": {},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"CapAdd": null,"CapDrop": null,"Capabilities": null,"Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "private","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "runc","ConsoleSize": [0,0],"Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": [],"BlkioDeviceReadBps": null,"BlkioDeviceWriteBps": null,"BlkioDeviceReadIOps": null,"BlkioDeviceWriteIOps": null,"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DeviceCgroupRules": null,"DeviceRequests": null,"KernelMemory": 0,"KernelMemoryTCP": 0,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": null,"OomKillDisable": false,"PidsLimit": null,"Ulimits": null,"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0,"MaskedPaths": ["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths": ["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d-init/diff:/var/lib/docker/overlay2/ff9cceb791db48b712f90809757294fdaf615cb173345e17455dfca4c330c537/diff","MergedDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d/merged","UpperDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d/diff","WorkDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d/work"},"Name": "overlay2"},"Mounts": [],"Config": {"Hostname": "c5672e9223d2","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/bin/bash","-c","while true;do echo SummerWind;sleep 1;done"],"Image": "centos","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"org.label-schema.build-date": "20200611","org.label-schema.license": "GPLv2","org.label-schema.name": "CentOS Base Image","org.label-schema.schema-version": "1.0","org.label-schema.vendor": "CentOS"}},"NetworkSettings": {"Bridge": "","SandboxID": "96108bd4f8742d18781c000c3633d5a384c0927d6b6e4fbc2b6a0e41ab729198","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/96108bd4f874","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "","Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "","IPPrefixLen": 0,"IPv6Gateway": "","MacAddress": "","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "e1e9632f31bacd00015077223d5747f0569d855480fc81e0517c2a52bed39fee","EndpointID": "","Gateway": "","IPAddress": "","IPPrefixLen": 0,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "","DriverOpts": null}}}} ]
  • (進入當前正在運行的容器)

  • docker exec ??# 進入容器后開啟一個新的終端,可以在里面操作【常用】
  • docker attach ?# 進入容器正在執行的終端,不會啟動新的進程!
  • (從容器內 拷貝文件到 主機上)

docker cp 容器ID:容器內的目錄或文件 主機上的路徑

#后臺交互運行一個容器 [root@iZbf2jzc4i64zvZ ~]# docker run -it centos /bin/bash #運行并進入容器 [root@d250d9bba70b /]# [root@iZbf2jzc4i64zvZ ~]# #容器的文件 [root@d250d9bba70b /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@d250d9bba70b /]# cd /home/ #進入容器home目錄,創建SummerWind.java文件 [root@d250d9bba70b home]# touch SummerWind.java #顯示已經創建 [root@d250d9bba70b home]# ls SummerWind.java #退出容器并停止容器 [root@d250d9bba70b home]# exit exit #查看運行著的容器 沒有 [root@iZbf2jzc4i64zvZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES #查看所有運行過的容器 有【容器在 里面的數據就在,不論是否運行都可以拷貝~~!!!】 [root@iZbf2jzc4i64zvZ ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d250d9bba70b centos "/bin/bash" 2 minutes ago Exited (0) 17 seconds ago upbeat_volhard #拷貝命令:docker cp 容器ID:容器內的目錄或文件 主機上的路徑 [root@iZbf2jzc4i64zvZ ~]# docker cp d250d9bba70b:/home/SummerWind.java /home [root@iZbf2jzc4i64zvZ ~]# cd .. [root@iZbf2jzc4i64zvZ /]# ls bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@iZbf2jzc4i64zvZ /]# cd /home #查看主機上的home文件夾下 已經把容器內的文件拷貝到主機上了 [root@iZbf2jzc4i64zvZ home]# ls SummerWind.java
  • (從宿主機 拷貝文件到 容器中)

docker cp 要拷貝的文件路徑 容器名:要拷貝到容器里面對應的路徑

# 命令: docker cp /MyFile/PAIANG.sql bd15ab4384fd:/tmp/# 容器中查看: root@bd15ab4384fd:/# cd /tmp/ root@bd15ab4384fd:/tmp# ll total 90460 drwxrwxrwt 1 root root 4096 Nov 10 14:04 ./ drwxr-xr-x 1 root root 4096 Nov 10 14:04 ../ drwxrwxrwt 2 root root 4096 Feb 14 2019 .oracle/ -rw-r--r-- 1 root root 92616247 Nov 10 13:54 PAIANG.sql

4. 命令圖解

5. 命令實戰

  • 安裝運行Nginx容器

#下載鏡像#運行Nginx容器(鏡像要放在最后) [root@iZbf2jzc4i64zvZ /]# docker run -d --name MyNginx -p 3344:80 nginx aab1ba8e191cda24e673ca0f61f19c64a74393a685b35e31a0c5401ab3732ccb [root@iZbf2jzc4i64zvZ /]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aab1ba8e191c nginx "/docker-entrypoint.猞" 17 seconds ago Up 15 seconds 0.0.0.0:3344->80/tcp MyNginx#本地測試 curl,居然還有這? [root@iZbf2jzc4i64zvZ /]# curl localhost:3344 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html>
  • 安裝運行Tomcat容器

#進入Tomcat容器 [root@iZbf2jzc4i64zvZ ~]# docker exec -it MyTomcat /bin/bash root@c7cf366b8a40:/usr/local/tomcat# #查看容器目錄下的文件 root@c7cf366b8a40:/usr/local/tomcat# ls BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work#拷貝webapps.dist目錄下所有文件到webapps目錄下 root@c7cf366b8a40:/usr/local/tomcat# cp -r webapps.dist/* webapps#去查看 拷貝過來了~!@ root@c7cf366b8a40:/usr/local/tomcat# cd webapps root@c7cf366b8a40:/usr/local/tomcat/webapps# ls ROOT docs examples host-manager manager

存在的問題:
? ?啟動后訪問發現是404,去webapps目錄下查看是空的,而webpass.dist目錄下有,拷貝到webapps目錄下 或 修改webapps.dist文件名為webapps

  • 安裝運行MySQL8.0容器

# MySQL8.0鏡像拉取 [root@sunmmerwind ~]# docker pull mysql:8.0 8.0: Pulling from library/mysql Digest: sha256:04ee7141256e83797ea4a84a4d31b1f1bc10111c8d1bc1879d52729ccd19e20a Status: Downloaded newer image for mysql:8.0 docker.io/library/mysql:8.0 # 查看拉取鏡像 [root@sunmmerwind ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 8.0 0627ec6901db 8 days ago 556MB # 安裝 [root@sunmmerwind conf]# docker run -d -p 3308:3306 -v /usr/mysql/conf:/etc/mysql/conf.d -v /usr/mysql/data:/var/lib/mysql --name MySQL8.0 -e MYSQL_ROOT_PASSWORD=123456 0627ec6901db d50c00e7401eb50c8595350fde0e10003046afd8d4007a6255b899a8af9c4d19

安裝參數解釋:

-v :掛載宿主機目錄和 docker容器中的目錄,前面是宿主機目錄,后面是容器內部目錄
-d :后臺運行容器
-p :映射容器端口號和宿主機端口號
-e :環境參數,MYSQL_ROOT_PASSWORD設置root用戶的密碼
–name:容器名字

# 查看容器是否啟動成功 [root@sunmmerwind conf]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d50c00e7401e 0627ec6901db "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp MySQL8.0

五、鏡像

1. 概念

鏡像是一種輕量級、可執行的獨立軟件包。
用來打包軟件運行環境和基于運行環境開發的軟件。
它包含運行某個軟件所需的所有內容,包括代碼、運行時、庫、環境變量及配置文件。

2. 作用

開發的所有應用,直接打包成docker鏡像,就可以運行起來~!
方便部署和擴展~

3. 如何得到鏡像?

  • 遠程倉庫下載
  • 朋友拷貝
  • 自己制作

4. 鏡像原理

特點:
? ?Docker鏡像都是只讀的,當容器啟動時,一個新的可寫層被加載到鏡像的頂部!
? ?這一層就是我們通常說的容器層,容器之下的都叫鏡像層!

  • UnionFS(聯合文件系統)

它可以把多個目錄(也叫分支)內容聯合掛載到同一個目錄下,而目錄的物理位置是分開的。
Union文件系統是Docker鏡像的基礎。
鏡像可以通過分層來進行繼承,基于基礎鏡像(沒有父鏡像),可以制作各種具體的應用鏡像。

白話:共用的東西,不會存在兩份 相互調用。

  • 鏡像加載原理

  • bootfs(boot file system)

類似電腦從黑屏到開機 中間的加載過程

  • rootfs(root file system)

類似啟動后的操作系統
對于精簡的OS,rootfs可以很小,只需包含最基本的命令、工具和程序庫就可以了。
因為底層直接用主機的內核,自己只需要提供rootfs就可以了。

  • 分層原理(Layers)

5. 提交鏡像

命令:docker commit -a=“作者” -m=“提交的信息” 容器ID 自定義名:版本號

用docker images命令就可以看到我們提交的鏡像了~!
不是提交到遠程,而是提交給本地鏡像庫,哈哈~!

[root@iZbf2jzc4i64zvZ ~]# docker commit -a="CoderWind" -m="add webapps content" c7cf366b8a40 mytomcat:001 sha256:c521385f72166af3e027cd39b10c7b7789df82682755f1a159bc7b949cab94e2 [root@iZbf2jzc4i64zvZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mytomcat 001 c521385f7216 5 seconds ago 652MB tomcat latest b4f6a90c69a4 3 days ago 647MB nginx latest 8cf1bfb43ff5 4 days ago 132MB centos latest 831691599b88 5 weeks ago 215MB

六、容器數據卷

七、DockerFile

八、IDEA整合Docker

九、Docker網絡

十、Docker集群

十一、Docker集群管理

十二、Docker持續化部署

總結

以上是生活随笔為你收集整理的Docker容器引擎的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。