1. 程式人生 > >Docker容器學習梳理--基礎環境安裝

Docker容器學習梳理--基礎環境安裝

以下是centos系統安裝docker的操作記錄

1)第一種方法:採用系統自帶的docker安裝,但是這一般都不是最新版的docker
安裝epel源
[[email protected] ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
[[email protected] ~]# rpm -ivh epel-release-latest-6.noarch.rpm
[[email protected] ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
[

[email protected] ~]# sed -i 's/^#baseurl/baseurl/g' /etc/yum.repos.d/epel.repo
[[email protected] ~]# sed -i 's/^mirrorlist/#mirrorlist/g' /etc/yum.repos.d/epel.repo

安裝docker-io
[[email protected] ~]# yum install docker-io -y

修改docker映象和容器儲存路徑
[[email protected]r-server ~]# vim /etc/sysconfig/docker
------------
other_args="--graph=/docker"                                 //配置這一行


------------

啟動docker
[[email protected] ~]# service docker start
[[email protected] ~]# chkconfig docker on
[[email protected] ~]# ps -ef|grep docker
root 36263 1 7 19:35 pts/0 00:00:00 /usr/bin/docker -d --graph=/docker
root 36413 34216 0 19:35 pts/0 00:00:00 grep --color docker

[[email protected]

~]# ls /docker/
containers devicemapper graph init linkgraph.db repositories-devicemapper tmp trust volumes

獲取官方centos或ubuntu映象。
這裡需要特別說明下:通過實測發現,現在在centos6下的docker獲取映象失敗,在centos7下的docker獲取映象可以。
所以一般建議在centos7下部署docker環境,然後docker獲取centos6的容器映象(centos7容器映象有不少坑)
[[email protected] ~]# docker pull centos
[[email protected] ~]# docker pull ubuntu
[[email protected] ~]# docker images            //檢視本地映象

執行一個docker容器
容器是在映象的基礎上來執行的,一旦容器啟動了,我們就可以登入到容器中,安裝自己所需的軟體或應用程式。(/bin/bash命令語句必須要放在映象名的後面)
[[email protected] ~]# docker run -i -t centos /bin/bash
[[email protected] ~]# docker run -i -t ubuntu /bin/bash

[[email protected] ~]# docker -v                       //版本不是最新版的
Docker version 1.7.1, build 786b29d/1.7.1

上面是centos6系統下做法。如果是centos7的話,直接yum install docker即可安裝

2)第二種方法:安裝Docker官方的最新發行版(推薦在centos7下采用這種方法安裝最新版本的docker)
[[email protected] ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[[email protected] ~]# curl -sSL https://get.daocloud.io/docker | sh
[[email protected] ~]# systemctl enable docker  
[[email protected] ~]# systemctl start docker

[[email protected] ~]# systemctl stop docker          //關閉
[[email protected] ~]# systemctl restart docker      //重啟

安裝過程結束後,可執行下面命令驗證安裝的狀態。
如果看到輸出 active (running) 就表示安裝成功。
[[email protected] ~]# systemctl status docker

檢視docker版本
[[email protected] ~]# docker -v                 //最新版本
Docker version 1.12.5, build 7392c3b

開機啟動,systemctl enable docker.service          (docker.service改為docker也可以)
啟動,systemctl start/stop/restart/status docker.service
啟動,systemctl start docker.service
幫助,docker --help
概要資訊,docker info
映象檢視,docker images
容器檢視,即程序檢視,docker ps -a

獲取官方centos或ubuntu映象
[[email protected] ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
45a2e645736c: Pull complete
Digest: sha256:c577af3197aacedf79c5a204cd7f493c8e07ffbce7f88f7600bf19c688c38799
Status: Downloaded newer image for centos:latest

[[email protected] ~]# docker images            //檢視映象
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 67591570dd29 2 weeks ago 191.8 MB

上面在centos7下安裝的docker,如果在獲取centos容器映象的時候不指定版本,那麼下載下來的容器映象預設也是centos7版本;
但是可以在獲取映象的時候指定版本,比如:
[[email protected] ~]# docker pull centos:centos6
centos6: Pulling from library/centos
32c4f4fef1c6: Pull complete
Digest: sha256:1092df198d3da4faccc0660941b763ce5adf133b0ec71701b760d6f173c1f47b
Status: Downloaded newer image for centos:centos6
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 67591570dd29 2 weeks ago 191.8 MB
centos centos6 8315978ceaaa 8 weeks ago 194.6 MB
daocloud.io/daocloud/daocloud-toolset latest 1ab33797d8a1 8 months ago 150.2 MB

還可以如下獲取映象
docker pull ubuntu:16.04
docker pull centos:laster
docker pull ubuntu:14.04
docker pull centos:7.1
docker pull centos:6.5
docker pull centos:6.8
docker pull centos:6
docker pull centos:7
docker pull nginx
docker pull tomcat
docker pull mysql
docker pull redis

啟動容器,並且進入到centos容器的bash命令。
啟動時的現象:其實相當於啟動了一個虛擬機器;
[[email protected] ~]# docker run -i -t centos /bin/bash
[[email protected] /]# echo "welcome to docker"
welcome to docker
[[email protected] /]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

通過docker ps命令可以列出當前所有正在執行的container
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd81256d3c96 centos "/bin/bash" About a minute ago Up About a minute focused_bose

下面命令將會停止上面啟動的例項,這樣就會自動強制退出容器
[[email protected] ~]# docker stop fd81256d3c96
fd81256d3c96
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

其他:
docker ps -l //列出最近一次啟動的,且正在執行的container
docker ps -a //列出所有的container

docker run -p 80:8080 <image> <cmd> //對映容器的8080埠到宿主機的80埠
docker rm `docker ps -a -q` //刪除所有容器
docker rm $CONTAINER_ID //刪除容器id為CONTAINER_ID的容器
docker images //檢視本地映象
docker attach $CONTAINER_ID //啟動一個已存在的docker例項
docker stop $CONTAINER_ID //停止docker例項(或者直接退出容器登陸;不然這個命令執行後也會強制退出容器的登陸)
docker logs $CONTAINER_ID //檢視docker例項執行日誌,確保正常執行
docker inspect $CONTAINER_ID //檢視container的例項屬性,比如ip等等

------------------------------------------------------------------------------------------------------------------------
如下:舉例說明在docker下部署nginx
宿主機上執行下面命令:啟動容器,進入centos容器的/bin/bash命令,並且會對映container的8080埠到宿主機的8888埠
/home/wangshibo/docker為要掛載的宿主機本地目錄(如果提前不建立,也會自動生成的);
/home/mycontainer為docker對映路徑,即在容器裡的路徑。這個和上面掛載宿主機的資料夾裡內容一樣!(下面是基於centos映象建立的容器)
[[email protected] ~]# docker run -t -i -v /home/wangshibo/docker:/home/mycontainer:rw -p 8888:8080 centos /bin/bash

docker命令包含以下三個部分:
docker run <相關引數> <映象 ID> <初始命令>
其中,相關引數包括:
-i:表示以“互動模式”執行容器
-t:表示容器啟動後會進入其命令列
-v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>

[[email protected] /]# yum install -y wget lsof vim

[[email protected] conf.d]# pwd
/etc/nginx/conf.d
[[email protected] conf.d]# cat test.conf
server {
listen 8080;
server_name localhost;
location / {
root /var/www/html;
index index.html;
}
}

[[email protected] conf.d]# mkdir -p /var/www/html
[[email protected] conf.d]# cat /var/www/html/test.html
this is nginx page of docker!!

啟動/關閉/重啟nginx:systemctl start/stop/restart nginx.service
開機啟動nginx:systemctl enable nginx.service
網站檔案存放預設目錄:/usr/share/nginx/html
網站預設站點配置:/etc/nginx/conf.d/default.conf
自定義Nginx站點配置檔案存放目錄:/etc/nginx/conf.d/
Nginx全域性配置:/etc/nginx/nginx.conf

啟動nginx,有如下報錯
[[email protected] conf.d]# systemctl start nginx.service
Failed to get D-Bus connection: Operation not permitted
--------------------------------------------------------------------------------------------------------------------
這是centos7容器裡面出現的一個BUG!
即centos7映象建立的容器裡面安裝服務後,不能用systemctl/service啟動服務,centos6的容器裡沒有這個坑!
可以通過使用其他的方式啟動或者換用centos6的映象來避免這個錯誤。

解決方案如下:
原因是dbus-daemon沒能啟動。其實systemctl並不是不可以使用,可以將你的CMD或者entrypoint設定為/usr/sbin/init即可。
這樣就會自動將dbus等服務啟動起來。即採用 /usr/sbin/init自動啟動dbus daemon

下面這個命令會一直在執行中,不能停止這個命令
[[email protected] ~]# docker run --privileged -t -i -v /home/wangshibo/docker:/home/mycontainer:rw -p 8888:8080 centos /sbin/init

保證上面的命令執行後,可以查到它的容器ID(這個ID就是nginx所在容器的ID)
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eaf66f1e43ab centos "/sbin/init" 16 seconds ago Up 15 seconds 0.0.0.0:8888->8080/tcp hungry_khorana

接著在另一個終端視窗下執行下面命苦:即通過上面容器ID進入到它的/bin/bash命令下
[[email protected] ~]# docker exec -it eaf66f1e43ab /bin/bash
[[email protected] /]#
然後就接著安裝nginx的操作了(從上面的yum install -y wget lsof vim開始重新操作)
--------------------------------------------------------------------------------------------------------------------

如上解決後,再次啟動nginx
[[email protected] /]# systemctl start nginx.service
[[email protected] /]# ps -ef|grep nginx
root 229 1 0 09:43 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 230 229 0 09:43 ? 00:00:00 nginx: worker process
root 233 87 0 09:43 ? 00:00:00 grep --color=auto nginx
[[email protected] /]# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 229 root 7u IPv4 60407703 0t0 TCP *:webcache (LISTEN)
nginx 230 nginx 7u IPv4 60407703 0t0 TCP *:webcache (LISTEN)

記得在宿主機的防火牆上開啟8888埠:
[[email protected] home]# vim /etc/sysconfig/iptables
.......
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8888 -j ACCEPT
[[email protected] home]# systemctl restart iptables.service

驗證訪問(宿主機ip假設為110.117.88.99)

檢查下容器建立時對映目錄和掛載目錄情況:
[[email protected] ~]# ll /home/mycontainer/       
total 0
[[email protected] ~]# echo "123456" > /home/mycontainer/test
[[email protected] ~]# cat /home/mycontainer/test            //容器裡面的情況
123456

[[email protected] ~]# cat /home/wangshibo/docker/test      //容器外掛載到宿主機目錄下的情況
123456

可以將這個docker主機新增到DaoCloud雲平臺裡面管理

-------------------------------------------------------------------------------------------------------------------------------------

[下載DaoCloud裡面的映象]可以通過DaoCloud雲平臺-->映象倉庫-->發現映象,找到對應映象的地址。最後可以根據這個映象地址下載到docker伺服器上,如下:

然後找到對應映象的映象地址:

然後就可以在伺服器上進行映象下載了:

-------------------------------------------------------------------------------------------------------------------------------------

以下是Ubuntu 12.04以上系統安裝docker環境的操作記錄

安裝方法一
ubuntu14.04以上的版本都是自帶docker安裝包的,所以可以直接安裝,但一般也不是最先版本。
[[email protected]:~]$ sudo apt-get update
[[email protected]:~]$ sudo apt-get install docker.io

安裝方法二
安裝 Docker 官方的最新發行版
[[email protected]:~]$ curl -sSL https://get.daocloud.io/docker | sh

安裝過程結束後,可執行下面命令驗證安裝結果。如果看到輸出 docker start/running 就表示安裝成功。
[[email protected]:~]$ sudo service docker status

--------------或者使用下面的安裝,也是最新版的docker--------------------
[[email protected]:~]$ sudo apt-get update
[[email protected]:~]$ curl -s https://get.docker.io/ubuntu/ | sudo sh
這個方法啟動docker若出現下面錯誤;
FATA[0000] Error loading docker apparmor profile: fork/exec /sbin/apparmor_parser: no such file or directory ()
別擔心,請安裝apparmor軟體即可
[[email protected]:~]$ sudo apt-get install apparmor

相關推薦

Docker容器學習梳理--基礎環境安裝

以下是centos系統安裝docker的操作記錄 1)第一種方法:採用系統自帶的docker安裝,但是這一般都不是最新版的docker安裝epel源[[email protected] ~]# wget http://dl.fedoraproject.org/pub/epel/epel-relea

Docker容器學習梳理--基礎知識(2)

之前已經總結了Docker容器學習梳理--基礎知識(1),但是不夠詳細,下面再完整補充下Docker學習的一些基礎。 Docker是個什麼東西 Docker是一個程式執行、測試、交付的開放平臺,Docker被設計為能夠使你快速地交付應用。 在Docker中,你可以將你的程式分為不同的基礎部分,對於每一個基

Docker容器學習梳理--基礎知識(1)

Docker是PaaS 提供商 dotCloud 開源的一個基於 LXC 的高階容器引擎,原始碼託管在 Github 上, 基於go語言並遵從Apache2.0協議開源。Docker是通過核心虛擬化技術(namespace以及cgroups等)來提供容器的資源隔離與安全保障。由於Docker通過作業系統層

Docker容器學習梳理--應用程式容器環境部署

轉:https://www.cnblogs.com/kevingrace/p/6425424.html 關於國內Docker映象,可以參考:Docker容器學習梳理--基礎知識(2) 的Docker映象使用。 如果我們需要在Docker環境下部署tomcat、redis、mysql

Docker容器學習梳理-容器時間跟宿主機時間同步

info 改變 日誌 time nat 並且 同步 統一 pre 在Docker容器創建好之後,可能會發現容器時間跟宿主機時間不一致,這就需要同步它們的時間,讓容器時間跟宿主機時間保持一致。如下:宿主機時間 [root@docker ~]# date Thu Jan 4

Docker容器學習梳理--容器登陸方法梳理(attach、exec、nsenter)

config .org app ron 簡單 dha entos ava dir 對於運行在後臺的Docker容器,我們運維人員時常是有登陸進去的需求。登陸Docker容器的方式:1)使用ssh登陸容器。這種方法需要在容器中啟動sshd,存在開銷和攻擊面增大的問題。同時也違

Docker容器學習梳理--日常操作總結

容器 指定 reat 配置 捕獲 inf sse 是你 not 使用Docker已有一段時間了,今天正好有空梳理下自己平時操作Docker時的一些命令和註意細節:Docker 命令幫助$ sudo docker Commands: attach Attach

Docker容器學習梳理--手動制作系統鏡像

lba osi github 我們 dha 版本 記錄 密碼 發布 docker官方和個人發布的鏡像由於版本等各種原因,漏洞較多,已統計Docker Hub超過30%的官方鏡像包含高危漏洞。此外,由於網絡等原因也會造成docker pull下載鏡像的速度很慢。基於這種情況,

Docker容器學習梳理--SSH方式登陸容器

rman ati ava hosts pair als mman ane tab 本章介紹如果通過ssh方式登陸Docker容器的操作記錄(其實不太建議直接用ssh去連接上容器的想法,雖然可以,但是有很多弊端,而且docker已經提供了容器內執行的命令,沒有必要再折騰每一個

Docker容器學習梳理--web管理工具DockerUI部署記錄

iptable nds emc alt latest size acc 輸入 本機 Docker容器學習梳理--web管理工具DockerUI部署記錄 Docker提供一個平臺來把應用程序當作容器來打包、分發、共享和運行,它已經通過節省工作時間來拯救了成千上萬的系統管理員和

Docker容器學習梳理-容器硬盤熱擴容

config 下載 load 出現 wfs 調整 cal group order 前面已介紹了docker很多知識點的操作記錄,今天這裏梳理下docker容器空間擴展的操作。默認情況下,docker容器的空間是10G。在實際生產環境下,對docker容器進行熱擴容(動態擴容

Docker容器學習梳理-Dockerfile構建鏡像

運行時 可執行 創建 管理 部分 重要 環境 每次 定制 在Docker的運用中,從下載鏡像,啟動容器,在容器中輸入命令來運行程序,這些命令都是手工一條條往裏輸入的,無法重復利用,而且效率很低。所以就需要一 種文件或腳本,我們把想執行的操作以命令的方式寫入其中,然後讓doc

Docker容器學習梳理-Dockerfile構建映象

在Docker的運用中,從下載映象,啟動容器,在容器中輸入命令來執行程式,這些命令都是手工一條條往裡輸入的,無法重複利用,而且效率很低。所以就需要一 種檔案或指令碼,我們把想執行的操作以命令的方式寫入其中,然後讓docker讀取並分析、執行,那麼重複構建、更新將變得很方便,

Docker容器學習梳理--手動製作系統映象

docker官方和個人釋出的映象由於版本等各種原因,漏洞較多,已統計Docker Hub超過30%的官方映象包含高危漏洞。此外,由於網路等原因也會造成docker pull下載映象的速度很慢。基於這種情況,我們可以手動定製docker系統映象。 以下記錄了在centos7上

Docker容器學習梳理--私有倉庫Registry使用

但有時候使用Docker Hub這樣的公共倉庫可能不方便,這種情況下使用者可以使用registry建立一個本地倉庫供私人使用,這點跟Maven的管理類似。 使用私有倉庫有許多優點: 1 2 1)節省網路頻寬,針對於每個映象不用每個人

Docker容器學習梳理-容器硬碟熱擴容

前面已介紹了docker很多知識點的操作記錄,今天這裡梳理下docker容器空間擴充套件的操作。預設情況下,物理機下建立的docker容器的空間是10G(虛擬機器下建立的docker容器空間就是虛擬機器的空間)。在實際生產環境下,對docker容器進行熱擴容(動態擴容)是

Docker容器學習梳理--容器間網路通訊設定(Pipework和Open vSwitch)

自從Docker容器出現以來,容器的網路通訊就一直是被關注的焦點,也是生產環境的迫切需求。容器的網路通訊又可以分為兩大方面:單主機容器上的相互通訊,和跨主機的容器相互通訊。下面將分別針對這兩方面,對容器的通訊原理進行簡單的分析,幫助大家更好地使用docker。前面已經

容器學習筆記之CentOS7安裝Docker

  0x00 概述 Docker從1.13版本之後採用時間線的方式作為版本號,分為社群版CE和企業版EE。 社群版是免費提供給個人開發者和小型團體使用的,企業版會提供額外的收費服務,比如經過官方測試認證過的基礎設施、容器、外掛等。 社群版按照stable和edge兩種方式釋出,

Java學習第一小節 -- Java語言程式設計基礎環境安裝

本文主題:安裝最基本的Java語言程式設計開發環境。 電腦系統推薦使用:win7(64位)、win10(64位) 所需程式設計工具:Java JDK、Eclipse 以下是百度網盤本人所使用的

Ubuntu14下Hadoop開發&lt;1&gt; 基礎環境安裝

oot jar包 臺式機 解壓 span ice href 安裝samba lan 準備了一臺淘汰的筆記本。單核CPU。3G內存。160G硬盤;準備一個2G的U盤在官網下載了64位的14.04版本號(麒麟)的ISO。下載UNetbootin(Ubuntu專用U盤安裝工