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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker pull 下载一半_Docker 从入门到掉坑

發(fā)布時間:2024/9/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker pull 下载一半_Docker 从入门到掉坑 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Docker 介紹

簡單的對docker進行介紹,可以把它理解為一個應(yīng)用程序執(zhí)行的容器。但是docker本身和虛擬機還是有較為明顯的出入的。我大致歸納了一下,可以總結(jié)為以下幾點:


docker自身也有著很多的優(yōu)點,關(guān)于它的優(yōu)點,可以總結(jié)為以下幾項:

安裝docker

從 2017 年 3 月開始 docker 在原來的基礎(chǔ)上分為兩個分支版本: Docker CE 和 Docker EE。

Docker CE 即社區(qū)免費版,Docker EE 即企業(yè)版,強調(diào)安全,但需付費使用。

首先我們需要移除舊的docker版本:

$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

接著我們需要安裝一些必要的系統(tǒng)工具:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

接下來我們需要添加軟件源信息:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 緩存:

sudo yum makecache fast

驗證容器

上邊的操作都是一些準(zhǔn)備操作,如果步驟過程中沒有出現(xiàn)什么異常的話,后邊就可以安裝docker了

sudo yum -y install docker-ce

安裝完畢之后便是開啟docker后臺服務(wù)步驟:

sudo systemctl start docker

當(dāng)我們的docker鏡像下載完畢之后,默認會有個helloworld的鏡像用于測試:

測試運行 hello-world

[root@runoob ~]# docker run hello-world

由于本地沒有hello-world這個鏡像,所以會下載一個hello-world的鏡像,并在容器內(nèi)運行。

關(guān)于docker的鏡像和容器介紹

容器的本質(zhì)就是進程,不同的容器有著自己獨立的root文件系統(tǒng),網(wǎng)絡(luò)配置,一個隔離的空間。容器一旦消失,則里面包含的數(shù)據(jù)也會發(fā)生丟失。容器里面所有的存儲信息都應(yīng)該使用數(shù)據(jù)卷或者其他形式。數(shù)據(jù)卷的生存周期獨立于容器,容器消亡,數(shù)據(jù)卷不會消亡。因此,使用數(shù)據(jù)卷后,容器刪除或者重新運行之后,數(shù)據(jù)卻不會丟失。

Docker 鏡像是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。

docker安裝nginx

初步安裝完了docker之后便開始進入一些實戰(zhàn)環(huán)節(jié)吧

首先我們需要在docker里面pull相關(guān)的nginx鏡像:

一開始宿主機并沒有啟動docker容器,需要啟動docker服務(wù)

service docker start

然后pull鏡像下來,并且啟動

docker run -d -p 80:80 --restart=always nginx:latest

參數(shù)講解:-d 后臺啟動 -p 宿主機的80端口映射容器的80端口。測試一下相關(guān)頁面,成功則如下圖:

接下來我們可以查看一下鏡像標(biāo)簽

docker images

這個命令查詢出來的只是鏡像的id,但是我們無法根據(jù)鏡像id進入容器中,進入容器需要有容器的id才可以:

于是可以通過這個命令來查看容器的id:

docker ps

然后進入容器修改信息
進入容器的命令有很多種,這里推薦可以使用這種類型:

docker exec -it 999318c7d567 /bin/bash

通過選擇相應(yīng)的tag-id進入容器,進入到容器里面之后,會發(fā)現(xiàn)里面仿佛就是一個新的linux操作系統(tǒng):

如何關(guān)閉docker容器?

比較簡單,這里不多說,自己操作就懂了

docker kill 4591552a4185

文件拷貝

懂得了基本的docker容器操作之后,我們來試試如何上傳文件到docker容器中,這個需要和宿主機進行文件交換才可以。

首先我們需要拿到容器id的全稱:

[root@localhost html]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0d4173ecf31f nginx:latest "nginx -g 'daemon of…" 9 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp sleepy_gould[root@localhost html]# docker inspect -f '{{.Id}}' 0d4173ecf31f 0d4173ecf31f894e234ae9eb3d9eddd1b9d10b7af5c46608679fe11918af9644

然后將文件拷貝進入docker容器中:

[root@localhost html]# docker cp /opt/html/user_login.html 0d4173ecf31f894e234ae9eb3d9eddd1b9d10b7af5c46608679fe11918af9644:/root/user_login.html [root@localhost html]#

接下來的操作就比較簡單了,查看到移動的頁面即可:

root@0d4173ecf31f:/usr/share/nginx/html# ls 50x.html index.html user_login.html root@0d4173ecf31f:/usr/share/nginx/html#

接下來的基本都是常規(guī)操作了,進入我們的nginx配置中:

root@0d4173ecf31f:/etc/nginx# vi nginx.conf bash: vi: command not found root@0d4173ecf31f:/etc/nginx# 發(fā)現(xiàn)沒有vi命令,需要下載安裝

在使用docker容器時,有時候里邊沒有安裝vi,敲vi命令時提示說:vi: command not found,這個時候就需要安裝vi,可是當(dāng)你敲apt-get install vi命令時,提示:

Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package vi

這時候需要敲:apt-get update,這個命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,這樣才能獲取到最新的軟件包。等更新完畢以后再敲命令:apt-get install vi命令即可。

現(xiàn)在docker有了,nginx鏡像也開啟了,就可以對nginx的配置做修改了。

docker里面安裝redis

首先還是老規(guī)矩,pull鏡像

[root@izwz9ic9ggky8kub9x1ptuz docker]# docker pull redis:4.0

拉取鏡像結(jié)束之后,內(nèi)容如下:

[root@izwz9ic9ggky8kub9x1ptuz docker]# docker pull redis:4.0 4.0: Pulling from library/redis b8f262c62ec6: Pull complete 93789b5343a5: Pull complete 49cdbb315637: Pull complete e244975d5eb1: Pull complete 25dca704d939: Pull complete db11ecc9cf34: Pull complete Digest: sha256:615b872e3af387206b62ffe66c1052f1653ed31b3afcfaa292a9244c92f2007a Status: Downloaded newer image for redis:4.0 docker.io/library/redis:4.0

ok,基本鏡像有了,那么就直接開啟容器吧

這里我們修改了宿主機的端口號為8879映射容器里面的6379哈。

[root@izwz9ic9ggky8kub9x1ptuz /]# docker run -p 8879:6379 -v $PWD/data:/data -v $PWD/conf/redis.conf:/etc/redis/redis.conf --privileged=true--name myredis -d redis:4.0 redis-server /etc/redis/redis.conf

參數(shù)解釋

  • -p 8879:8879: 將容器的8879端口映射到主機的6379端口
  • -v $PWD/data:/data : 將主機中當(dāng)前目錄下的data掛載到容器的/data
  • redis-server —appendonly yes : 在容器執(zhí)行redis-server啟動命令,并打開redis持久化配置

啟動完畢之后,一切都開始正常運行了。

進入容器,開始檢測redis是否正常:

這里建議開啟redis的時候最好在宿主機做一份redis配置文件,映射到容器里面,不然進入容器中根本找不到相應(yīng)的redis配置文件,很痛苦。

docker里面安裝MySQL

這部分的內(nèi)容比較簡單,只需要將鏡像拉下來即可:

docker run --name 【容器名】 -e MYSQL_ROOT_PASSWORD=【mysql密碼】 -d -i -p 3309:3306 mysql:5.7.24

然后等待一段時間,終于我們的MySQL容器安裝好了:

容器的內(nèi)存資源消耗情況
由于我購買的是一臺小型的服務(wù)器,相關(guān)的配置如下所示,所以在給各個運行的容器進行資源分配的時候需要考慮到每個docker容器占用的資源情況。

目前已經(jīng)搭建了mysql容器,redis容器,還有一個nginx容器,如果再添加一個java應(yīng)用的話,目測跑java容器需要至少500m左右的內(nèi)存大小來支撐。

通過使用docker stats命令來看當(dāng)前服務(wù)器的內(nèi)存,由于平日的訪問量并不高,可以給當(dāng)前的mysql,redis分配小一些內(nèi)存資源:

這時候可以采用docker的update命令來對內(nèi)存大小進行管理分配:

docker update -m 350m --memory-swap -1 mysqlserver

--memory-swap -1 參數(shù)是指不讓容器和宿主機進行內(nèi)存交換,如果需要則需要額外調(diào)整,
設(shè)置下內(nèi)存的限制之后結(jié)果如下:

docker容器啟動失敗分析實戰(zhàn)

在配置docker新容器的時候,例如說給mysql配置my.cnf文件的某些屬性,需要重啟容器才能生效。但是有時候可能因為手誤,導(dǎo)致配置出現(xiàn)異常,容器重啟失敗,這個時候該怎么辦呢?

這個時候最簡單粗暴的方式就是,將該容器先rm掉,然后重新安裝,但是這樣的操作過于暴力化,萬一容器里面還有其他重要數(shù)據(jù),直接rm操作不可取。

其實docker本質(zhì)也是安裝在宿主機里面的,所以相應(yīng)的配置文件在宿主機里面也能找到痕跡,這里記錄了之前我掉坑的一些補救方式:

docker inspect [容器名稱]

通過該命令可以查看到容器的內(nèi)部配置屬性信息:


這時候我們可以查看到一個叫做MergedDir的目錄文件夾,進入該文件夾的上一級目錄,

cd /var/lib/docker/overlay2/f4ab9eff7a18f20f977595af38f5eb273127e0de8845a42fe71fa9b8850a988b

接著我們查看該目錄下結(jié)構(gòu),會發(fā)現(xiàn)一個叫做diff的文件夾


帶著好奇心,一步一步地進入到文件夾的內(nèi)部,就會找到之前在docker容器中配置的mysql文件了,手動將原先的配置修改回來,容器便重啟成功了。

推薦閱讀(點擊即可跳轉(zhuǎn)閱讀)

1. SpringBoot內(nèi)容聚合

2. 面試題內(nèi)容聚合

3. 設(shè)計模式內(nèi)容聚合

4. Mybatis內(nèi)容聚合

5. 多線程內(nèi)容聚合

總結(jié)

以上是生活随笔為你收集整理的docker pull 下载一半_Docker 从入门到掉坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。