中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker入門及實戰演練(一)

發布時間:2020-07-27 11:16:11 來源:網絡 閱讀:182 作者:yixian12580 欄目:系統運維

一.簡介

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。

二.Docker基本組成

1.鏡像(Image)
鏡像,就是面向對象中的類,相當于一個模板。從本質上來說,鏡像相當于一個文件系統。Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。

2.容器(Container)
容器,就是類創建的實例,就是依據鏡像這個模板創建出來的實體。容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行于屬于自己的獨立的命名空間。因此容器可以擁有自己的root 文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶ID 空間。容器內的進程是運行在一個隔離的環境里,使用起來,就好像是在一個獨立于宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。

3.倉庫(Repository)
倉庫,從認識上來說,就好像軟件包上傳下載站,有各種軟件的不同版本被上傳供用戶下載。鏡像構建完成后,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。
Docker入門及實戰演練(一)

三.Docker的優勢

1.更高效的利用系統資源:由于容器不需要進行硬件虛擬以及運行完整操作系統等額外開銷,Docker 對系統資源的利用率更高。無論是應用執行速度、內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高效。因此,相比虛擬機技術,一個相同配置的主機,往往可以運行更多數量的應用。

2.更快速的啟動時間:傳統的虛擬機技術啟動應用服務往往需要數分鐘,而Docker 容器應用,由于直接運行于宿主內核,無需啟動完整的操作系統,因此可以做到秒級、甚至毫秒級的啟動時間。

3.一致的運行環境:開發過程中一個常見的問題是環境一致性問題。由于開發環境、測試環境、生產環境不一 致,導致有些bug 并未在開發過程中被發現。而Docker 的鏡像提供了除內核外完整的運行時環境,確保了應用運行環境一致性,從而不會再出現這類問題。

4.持續交付和部署:Docker是build once,run everywhere. 使用Docker 可以通過定制應用鏡像來實現持續集成、持續交付、部署。開發人員可以通過Dockerfile 來進行鏡像構建,并結合持續集成(Continuous Integration) 系統進行集成測試,而運維人員則可以直接在生產環境中快速部署該鏡像。

5.更輕松的遷移:Docker 使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基于基礎鏡像進一步擴展鏡像也變得非常簡單。

傳統開發流程
Docker入門及實戰演練(一)
Docker環境開發流程
Docker入門及實戰演練(一)

四.與傳統虛擬機對比

Docker入門及實戰演練(一)

五.Docker命令

1.創建鏡像
1.1基于已有的鏡像容器創建

? ??????? docker commit [options] container [repository[:tag]]

                     option:-a, --author=“”       #作者信息

                                -m,--message=“”      #提交信息

                                -p,? --pause=true        #提交時暫停容器運行

1.2基于本地模板導入創建

      docker load < ***.tar  --本地模板文件tar

1.3基于Dockerfile文件構建鏡像

      docker build -t image-name basedir

2.刪除鏡像

        docker rmi image     #image可以是標簽或者ID
        docker rmi –f image    #強制刪除鏡像
注意:用docker rmi 命令刪除鏡像時,首先要刪除容器,再刪除鏡像。否則會提示鏡像在容器中運行。

Docker入門及實戰演練(一)

鏡像管理指令
Docker入門及實戰演練(一)

3.創建/啟動/停止/刪除容器

    docker  create image   #創建的容器是停止狀態

    docker  start/stop container_id     #啟動/停止容器

    docker  run image         #創建并啟動容器

    docker rm container_id    #刪除容器

創建容器常用選項
Docker入門及實戰演練(一)

管理容器常用命令
Docker入門及實戰演練(一)

4.鏡像與容器聯系
鏡像不是一個單一的文件,而是有多層構成。我們可以通過docker history <ID/NAME> 查看鏡像中各層內容及大小,每層對應著Dockerfile中的一條指令。Docker鏡像默認存儲在/var/lib/docker/<storage-driver>中。
容器其實是在鏡像的最上面加了一層讀寫層,在運行容器里做的任何文件改動,都會寫到這個讀寫層。如果容器刪除了,最上面的讀寫層也就刪除了,改動也就丟失了。
Docker使用存儲驅動管理鏡像每層內容及可讀寫層的容器層。
Docker入門及實戰演練(一)

5.將主機數據掛載到容器
Docker提供三種不同的方式將數據從宿主機掛載到容器中:volumes,bind mounts和tmpfs。

volumes:Docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)。
bind mounts:可以存儲在宿主機系統的任意位置。
tmpfs:掛載存儲在宿主機系統的內存中,而不會寫入宿主機的文件系統。

Docker入門及實戰演練(一)

5.1 volume
Docker入門及實戰演練(一)
注意:

# 如果沒有指定卷,自動創建。
# 建議使用--mount,更通用。

5.2 Bind Mounts
Docker入門及實戰演練(一)

注意:

# 如果源文件/目錄沒有存在,不會自動創建,會拋出一個錯誤。
# 如果掛載目錄在容器中非空目錄,則該目錄現有內容將被隱藏。

5.3 tmpfs
容器中使用 tmpfs:

# docker run -d -it --name nginx-test --mount type=tmpfs,destination=/usr/share/nginx/html nginx
# docker run -d -it --name nginx-test --tmpfs /usr/share/nginx/html nginx

注意:

# tmpfs方式僅存儲在主機系統的內存中,不會寫入主機的文件系統。
# tmpfs掛載不能在容器間共享。
# tmpfs只能在Linux容器上工作,不能在Windows容器上工作。

六.Docker實戰--構建lnmp環境,搭建WordPress博客

實驗環境:

Docker入門及實戰演練(一)

1.Docker安裝
首先安裝依賴包
Docker入門及實戰演練(一)

安裝Docker(之前已安裝過,所以提示已經安裝)
Docker入門及實戰演練(一)

查看Docker是否安裝成功
Docker入門及實戰演練(一)

啟動Docker并加入開機自啟動

[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker

2.用Dockerfile方式構建鏡像
Dockerfile指令
Docker入門及實戰演練(一)
環境說明:
在本文中我都是基于centos 7.5系統,nginx和php用的源碼包來構建,如果你不想用源碼包,也可用yum方式構建。

nginx,用的是源碼包來構建,版本為nginx-1.12.2.tar.gz,下載地址http://nginx.org/en/download.html/
php,也用的源碼包來構建,版本為php-5.6.31.tar.gz,下載地址http://php.net/downloads.php

創建鏡像時所需文件
Docker入門及實戰演練(一)

在Dockerfiles目錄下創建了兩個目錄(nginx,php),里面分別存放Dockerfile文件、源碼包。nginx目錄下放了nginx.conf配置文件,php目錄下也放置了php.ini配置文件(在實際環境中,這兩個文件是經常需要修改的,單獨拿出來后在啟動容器時你可以把這兩個文件mount到容器中,便于管理。)。

2.1 nginx 構建
Dockerfile內容:

Docker入門及實戰演練(一)
分析一下Dockerfile的內容,當你構建鏡像時,它會根據你編排好的內容一步一步的執行下去,如果當中的某一步執行不下去,會立刻停止構建。上面的大部分指令都很好理解,大家可以對照上文的Dockerfile指令圖進行理解,最后一個指令我要詳細說明一下:CMD ["./sbin/nginx","-g","daemon off;"]

./sbin/nginx ,就是正常啟動nginx服務;
-g: 設置配置文件外的全局指令,也就是啟動nginx時設置了daemon off參數,默認參數是打開的on,是否以守護進程的方式運行nginx,守護進程是指脫離終端并且在后臺運行的進程。這里設置為off,也就是不讓它在后臺運行。為什么我們啟動nginx容器時不讓它在后臺運行呢,docker 容器默認會把容器內部第一個進程,也就是pid=1的程序作為docker容器是否正在運行的依據,如果docker 容器pid掛了,那么docker容器便會直接退出。

nginx.conf 內容

Docker入門及實戰演練(一)
配置中主要添加了 location ~ .php這一段的內容,其中fastcgi_pass的 lnmp_php,這個是后面啟動php容器時的名稱。當匹配到php的請求時,它會轉發給lnmp_php這個容器php-fpm服務來處理。正常情況下,如果php服務不是跑在容器中,lnmp_php這個內容一般寫php服務器的Ip地址。

build 構建nginx鏡像

切換到nginx目錄下:

Docker入門及實戰演練(一)

構建:

[root@localhost nginx]# docker build  -t nginx:1.12.2

查看鏡像是否構建成功:
Docker入門及實戰演練(一)
2.2 PHP構建

Dockerfile內容

Docker入門及實戰演練(一)

php.ini 內容(PHP默認的配置內容就好,實在找不到的可以復制粘貼我的)

    [PHP]
    engine = On
    short_open_tag = Off
    asp_tags = Off
    precision = 14
    output_buffering = 4096
    zlib.output_compression = Off
    implicit_flush = Off
    unserialize_callback_func =
    serialize_precision = 17
    disable_functions =
    disable_classes =
    zend.enable_gc = On
    expose_php = On
    max_execution_time = 300
    max_input_time = 300
    memory_limit = 128M
    error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
    display_errors = Off
    display_startup_errors = Off
    log_errors = On
    log_errors_max_len = 1024
    ignore_repeated_errors = Off
    ignore_repeated_source = Off
    report_memleaks = On
    track_errors = Off
    html_errors = On
    variables_order = "GPCS"
    request_order = "GP"
    register_argc_argv = Off
    auto_globals_jit = On
    post_max_size = 32M
    auto_prepend_file =
    auto_append_file =
    default_mimetype = "text/html"
    always_populate_raw_post_data = -1
    doc_root =
    user_dir =
    enable_dl = Off
    file_uploads = On
    upload_max_filesize = 2M
    max_file_uploads = 20
    allow_url_fopen = On
    allow_url_include = Off
    default_socket_timeout = 60
    [CLI Server]
    cli_server.color = On
    [Date]
    date.timezone = Asia/Shanghai
    [filter]
    [iconv]
    [intl]
    [sqlite]
    [sqlite3]
    [Pcre]
    [Pdo]
    [Pdo_mysql]
    pdo_mysql.cache_size = 2000
    pdo_mysql.default_socket=
    [Phar]
    [mail function]
    SMTP = localhost
    smtp_port = 25
    mail.add_x_header = On
    [SQL]
    sql.safe_mode = Off
    [ODBC]
    odbc.allow_persistent = On
    odbc.check_persistent = On
    odbc.max_persistent = -1
    odbc.max_links = -1
    odbc.defaultlrl = 4096
    odbc.defaultbinmode = 1
    [Interbase]
    ibase.allow_persistent = 1
    ibase.max_persistent = -1
    ibase.max_links = -1
    ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
    ibase.dateformat = "%Y-%m-%d"
    ibase.timeformat = "%H:%M:%S"
    [MySQL]
    mysql.allow_local_infile = On
    mysql.allow_persistent = On
    mysql.cache_size = 2000
    mysql.max_persistent = -1
    mysql.max_links = -1
    mysql.default_port =
    mysql.default_socket =
    mysql.default_host =
    mysql.default_user =
    mysql.default_password =
    mysql.connect_timeout = 60
    mysql.trace_mode = Off
    [MySQLi]
    mysqli.max_persistent = -1
    mysqli.allow_persistent = On
    mysqli.max_links = -1
    mysqli.cache_size = 2000
    mysqli.default_port = 3306
    mysqli.default_socket =
    mysqli.default_host =
    mysqli.default_user =
    mysqli.default_pw =
    mysqli.reconnect = Off
    [mysqlnd]
    mysqlnd.collect_statistics = On
    mysqlnd.collect_memory_statistics = Off
    [OCI8]
    [PostgreSQL]
    pgsql.allow_persistent = On
    pgsql.auto_reset_persistent = Off
    pgsql.max_persistent = -1
    pgsql.max_links = -1
    pgsql.ignore_notice = 0
    pgsql.log_notice = 0
    [Sybase-CT]
    sybct.allow_persistent = On
    sybct.max_persistent = -1
    sybct.max_links = -1
    sybct.min_server_severity = 10
    sybct.min_client_severity = 10
    [bcmath]
    bcmath.scale = 0
    [browscap]
    [Session]
    session.save_handler = files
    session.use_strict_mode = 0
    session.use_cookies = 1
    session.use_only_cookies = 1
    session.name = PHPSESSID
    session.auto_start = 0
    session.cookie_lifetime = 0
    session.cookie_path = /
    session.cookie_domain =
    session.cookie_httponly =
    session.serialize_handler = php
    session.gc_probability = 1
    session.gc_divisor = 1000
    session.gc_maxlifetime = 1440
    session.referer_check =
    session.cache_limiter = nocache
    session.cache_expire = 180
    session.use_trans_sid = 0
    session.hash_function = 0
    session.hash_bits_per_character = 5
    url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
    [MSSQL]
    mssql.allow_persistent = On
    mssql.max_persistent = -1
    mssql.max_links = -1
    mssql.min_error_severity = 10
    mssql.min_message_severity = 10
    mssql.compatibility_mode = Off
    mssql.secure_connection = Off
    [Assertion]
    [COM]
    [mbstring]
    [gd]
    [exif]
    [Tidy]
    tidy.clean_output = Off
    [soap]
    soap.wsdl_cache_enabled=1
    soap.wsdl_cache_dir="/tmp"
    soap.wsdl_cache_ttl=86400
    soap.wsdl_cache_limit = 5
    [sysvshm]
    [ldap]
    ldap.max_links = -1
    [mcrypt]
    [dba]
    [opcache]
    [curl]

build構建php鏡像
php源碼包、php.ini、Dockerfile都準備好了之后,現在我們可以來用docker build來構建這個鏡像了:
切換到php目錄下:
Docker入門及實戰演練(一)

構建php鏡像:

[root@localhost php]# docker build  -t php:5.6.31 .

查看鏡像是否構建成功
Docker入門及實戰演練(一)

3.運行容器
3.1創建自定義網絡lnmp
先創建一個自定義網絡,運行ningx、php這些容器的時候加入到lnmp網絡中來:

# 查看默認網絡:
[root@localhost php]# docker network ls
創建:
[root@localhost php]# docker network create lnmp

3.2創建php容器

創建容器:
[root@localhost php]# docker run -itd --name lnmp_php --network lnmp -v /app/wwwroot:/usr/local/nginx/html php:5.6.31

參數說明:

-itd: # 在容器中打開一個偽終端進行交互操作,并在后臺運行;
--name: # 為容器分配一個名字lnmp_php;
--network: # 為容器指定一個網絡環境為lnmp網絡;
--mout: # 把宿主機的/app/wwwroot目錄掛載到容器的/usr/local/nginx/html目錄,掛載也相當于數據持久化;
php:5.6.31: # 指定剛才構建的php鏡像來啟動容器;

查看php容器是否運行:

Docker入門及實戰演練(一)

3.3創建nginx容器:

創建容器:
[root@localhost php]# docker run -itd --name lnmp_nginx --network lnmp -p 80:80 -v /app/wwwroot:/usr/local/nginx/html nginx:1.12.2

查看容器是否運行:
Docker入門及實戰演練(一)

3.4測試訪問
創建一個index.html靜態頁面來訪問:

[root@localhost wordpress]# echo "Dockerfile lnmp test" > /app/wwwroot/index.html

用瀏覽器訪問宿主機的IP:
Docker入門及實戰演練(一)
再創建一個index.php文件開測試:

[root@localhost wordpress]# echo "<? phpinfo();" > /app/wwwroot/index.php

訪問PHP頁面:
Docker入門及實戰演練(一)

3.5創建mysql容器:

[root@localhost ~]# docker run -itd --network lnmp -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6 --character-set-server=utf8
#本地沒有mysql5.6的鏡像的話,會自動從倉庫拉取;

查看mysql容器是否啟動:
Docker入門及實戰演練(一)
進到mysql容器里創建wordpress數據庫:
Docker入門及實戰演練(一)

查看wordpress是否創建成功:
Docker入門及實戰演練(一)

Ctrl+p再Ctrl+q退出mysql容器,回到宿主機

3.6下載wordpress博客系統測試lnmp
下載wordpress文件到/app/wwwroot目錄下
Docker入門及實戰演練(一)
wordpress文件下載地址:https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz
解壓wordpress壓縮包并訪問測試:

root@localhost ~]# tar -zxvf wordpress-4.7.4-zh_CN.tar.gz

打開瀏覽器訪問:
http://容器宿主機IP/wordpress/wp-admin/setup-config.php

Docker入門及實戰演練(一)

配置wordpress博客:
Docker入門及實戰演練(一)

提交:
Docker入門及實戰演練(一)

輸入信息安裝Wordpress:
Docker入門及實戰演練(一)

Docker入門及實戰演練(一)

七.文件遷移

可用docker save命令將鏡像保存為一個tar文件:

[root@localhost ~]# docker save nginx:1.12.2 | gzip > nginx1.12.2.tar.gz

再用docker load命令導入:

[root@localhost ~]# docker load < nginx.1.12.2.tar.gz
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屏山县| 花莲市| 赤峰市| 霍林郭勒市| 望江县| 和林格尔县| 如东县| 遵化市| 安西县| 淄博市| 呼图壁县| 台中市| 普格县| 漳州市| 施秉县| 富裕县| 九寨沟县| 象山县| 广州市| 永胜县| 临江市| 攀枝花市| 曲靖市| 米林县| 三江| 息烽县| 澄江县| 康定县| 龙川县| 色达县| 新乡县| 上饶市| 宿州市| 崇礼县| 美姑县| 都昌县| 昌吉市| 梓潼县| 北票市| 五指山市| 桑植县|