<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker基本使用命令

          共 7984字,需瀏覽 16分鐘

           ·

          2021-07-08 09:45


          前言


          剛看別人使用Docker的時候有很多不解,為什么要用Docker,Docker怎么用?Docker配置為什么這么難?為什么網(wǎng)絡(luò)訪問不通?等等因素阻礙了筆者學(xué)習(xí)Docker?其實筆者也很笨,有很多思考不清晰的點。順便也分享下。
          學(xué)時疑惑:

          Q:我一套服務(wù)為什么不放在一個容器里面(Java、MySQL、Nginx、Redis等)?
          A:因為既要維護容器內(nèi)網(wǎng)絡(luò),又要維護端口等等之類的東西,Docker就是為了快速搭建環(huán)境而生的,而且Docker最好也是一個服務(wù)一個容器,這樣好打理。

          Q:Docker能放到生產(chǎn)環(huán)境嗎?
          A:在公司沒有專門的運維團隊情況下,不建議使用Docker部署的環(huán)境作為生產(chǎn)環(huán)境,因為不僅僅要維護項目和中間件,Docker或者Kubernetes出現(xiàn)問題后,還要解決這些問題,也就是還要解決Docker的問題。如果在沒有專門運維團隊的情況下,最好使用某里云的服務(wù),例如RDS,SLB等,最起碼別人還會幫你維護你的數(shù)據(jù)庫和服務(wù)。


          基本命令


          下載鏡像

          # 以Redis為例子
          docker pull redis


          運行鏡像

          docker run \
          -d \ # 后臺運行
          --name redis6 \ # 自定義名字
          -p 6379:6379 \ # 端口映射
          redis # 鏡像名稱
          docker run -d --name redis6 -p 6379:6379 redis redis-server --appendonly yes --requirepass "123456" # 完整命令


          進入容器

          第一種(不推薦,當退出容器使用exit命令時,會停止這個容器):

          docker attach 容器id

          第二種:

          docker exec -it 容器id /bin/bash


          暫停容器

          docker stop 容器id


          啟動容器

          docker start 容器id


          查詢?nèi)萜髁斜?/strong>

          docker ps -a # 查看所有容器
          docker ps # 查看運行中的容器

          run和start的區(qū)別:

          • run是創(chuàng)建一個新的容器

          • start是把已經(jīng)創(chuàng)建好的容器啟動


          查看容器信息

          docker inspect 容器id


          掛載


          掛載介紹

          容器里面的文件都是在容器內(nèi)部,而跟你當前電腦是沒有關(guān)系的,如果刪除了容器怎么辦?但是資料又想保存就像MySQL一樣,我只是換一臺電腦就要把整個容器復(fù)制過去,太麻煩了!所以需要把容器的文件跟當前主機文件作為一個映射。

          命令教程

          參數(shù)-v宿主機路徑:容器路徑

          # 以MySQL為例子
          docker run -d --name mysql8 -p 3306:3306 -v /data/mysql8/config:/etc/mysql/conf.d -v /data/mysql8/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
          # 以上的命令可以參考:https://hub.docker.com/_/mysql,里面有詳細介紹


          為什么要知道這么多路徑或者參數(shù)

          每個中間件或者一個數(shù)據(jù)庫容器,他可能需要有很多配置,例如密碼,持久化文件的路徑等等。那我們怎么知道路徑是什么:

          • 可以進hub.docker.com找到自己需要的容器然后看文檔

          • 進容器找了(這個方法有點笨,筆者一開始就是這么找到的。)


          網(wǎng)絡(luò)


          容器之間怎么進行通訊

          容器雖然是能相互通訊的,但是容器每次重啟ip都跟上一次不一樣,所以這樣通訊會很復(fù)雜。

          示范

          # 先拉個CentOS鏡像下來
          docker pull centos
          # 創(chuàng)建個容器
          docker run -d -it --name centos1 centos
          docker run -d -it --name centos2 centos

          docker inspect centos1_id

          截取一些容器信息下來:

          [
              {
                  "NetworkSettings": {
                      "Networks": {
                          "bridge": {
                              "IPAMConfig": null,
                              "Links": null,
                              "Aliases": null,
                              "NetworkID""9e7ed6d29ca3474de04409833e39b7c7965c7c63d3a1f509886a7a998e4825f8",
                              "EndpointID""41230bf523fac8fa4933989d98baaaa7655fba5c5dadd14e63839ffe868ed3f8",
                              "Gateway""172.17.0.1",
                              "IPAddress""172.17.0.4",
                              "IPPrefixLen": 16,
                              "IPv6Gateway""",
                              "GlobalIPv6Address""",
                              "GlobalIPv6PrefixLen": 0,
                              "MacAddress""02:42:ac:11:00:04",
                              "DriverOpts": null
                          }
                      }
                  }
              }
          ]

          docker inspect centos2_id

          [
              {
                  "NetworkSettings": {
                      "Networks": {
                          "bridge": {
                              "IPAMConfig": null,
                              "Links": null,
                              "Aliases": null,
                              "NetworkID""9e7ed6d29ca3474de04409833e39b7c7965c7c63d3a1f509886a7a998e4825f8",
                              "EndpointID""8ae77d46887c795983ee7a8fb96951d05e236b4ca4b4caa5d5964f892e18a476",
                              "Gateway""172.17.0.1",
                              "IPAddress""172.17.0.5",
                              "IPPrefixLen": 16,
                              "IPv6Gateway""",
                              "GlobalIPv6Address""",
                              "GlobalIPv6PrefixLen": 0,
                              "MacAddress""02:42:ac:11:00:05",
                              "DriverOpts": null
                          }
                      }
                  }
              }
          ]


          • 以上centos1 ip為172.17.0.4

          • 以上centos2 ip為172.17.0.5


          解決問題

          docker network create centos-network
          docker run -d -it --network centos-network --name centos3 centos
          docker run -d -it --network centos-network --name centos4 centos
          docker exec -it centos3_id /bin/bash
          ping centos4 
          # 所以當創(chuàng)建了一個network后 容器都能加入到這個網(wǎng)絡(luò)里面,很方便

          這樣就可以解決每次容器重啟后ip不一致問題。


          小結(jié)


          其實在剛使用容器的時候會很麻煩:

          • 不知道Docker的命令和容器需要的參數(shù)

          • 每次都要上官網(wǎng)找下有什么參數(shù)或者百度,但相比每次下載文件下來,進去配置省很多力氣,并且配置一次保存好用過的命令,以后都可以用了,不需要再重復(fù)去改很多東西

          • 其實在一些小型公司,沒有專業(yè)的運維的話盡量不要在生產(chǎn)環(huán)境上使用Docker,不然真的出現(xiàn)問題的話會很頭疼,不僅僅要維護項目,還要維護Docker


          原文鏈接:https://juejin.cn/post/6974427129748389902
          轉(zhuǎn)自:分布式實驗室


          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  OL无码破解在线观看 | 一区二区黄色电影 | 亚洲五月丁香免费 | 亚洲综合区 | 在线播放视频一区 |