Docker的安裝和使用

Docker架構

Docker安裝

1. 去官網下載repo
2. 更改成國內鏡像baseurl=https://download.docker.com/linux/
3. 有可能須要安裝依賴包 yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.66-1.el7.noarch.rpm
4.  yum install docker-ce

Docker配置

1. /etc/docker/daemon.json
    {
        "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    Docker鏡像加速
2. 啓動
# systemctl start docker
3. 查看 
# docker help
# docker info
4. Docker經常使用
# docker image --help
# docker search nginx  (https://hub.docker.com/)
    nginx 頂級倉庫
    jwilder/nginx-proxy 私有倉庫
# docker image pull nginx:1.14-alpine (下載alpine image, alpine是一個體積特別小的Nginx版本,沒有任何調試工具,在實際工做中,根據自已的須要生成image)
# docker pull quay.io/coreos/flannel:v0.10.0-amd64 (到quay.io網站下載鏡像,這個網站是經常使用的第三方鏡像)
# docker image pull busybox:latest
# docker image ls (顯示下載的image)
# docker image ls --no-trunc (顯示詳細信息)
# docker container --help
# docker container ls (顯示容器)
# docker container ps (顯示容器)
# docker container run --help
# docker network list (網絡查詢)
    docker0: 默認是NAT的網橋
# docker run --name b1 -it busybox:latest (以b1的名字運行image busybox,而且是交互式界面)
    / # ls (進入到busybox容器的shell)
    mkdir /data/html -p
    vim /data/html/index.html (在容器裏生成主頁)
    httpd -f -h /data/html (啓動b1容器裏和httpd)
# docker inspect b1 (在host上查看b1容器的IP)
# curl 172.17.0.2 (訪問b1容器的網頁)
    在容器裏exit,退出容器
# docker ps -a (顯示全部容器,運行的和中止的)
# docker container start -i -a b1 (啓動容器)
#  docker kill b1 (強制中止容器)
# docker rm b1 (永久刪除容器b1)
# docker run --name web1 -d nginx:1.14-alpine (啓動nginx容器,若是本地沒有下載nginx image,只要repo指定爲hub.docker.com, 會自動下載,在容器中的進程不能運行在後臺,由於是惟一進程,是支撐一個容器的骨架)
# docker run --name kdvsor1 -d redis:4-alpine (運行redis容器)
# docker exec -it kdvsor1 /bin/sh 
    # redis-cli
# docker logs web1 (在host中查看web1容器的日誌)

Docker event state

Docker image

Docker鏡像含有啓動容器所須要的文件系統及其內容,所以,其主要做用建立並啓動docker容器。

Docker分層機制

1. bootfs:用於系統引導的文件系統,包括bootloader和kernel,容器啓動完成後會被卸載以節約內存資源。
2. rootfs:位於bootfs之上,表現爲docker容器的根文件系統。rootfs由內核掛載爲只讀模式,然後經過聯合掛載技術額外掛載一個可寫層;
                位於下層的鏡像稱爲父鏡像,最底層的稱爲基礎鏡像
                最上層爲可讀寫層,基下層均爲只讀層

Docker Registry

啓動容器時,Docker Daemon會試圖從本地獲取相關的鏡像,本地鏡像不存在時,其將從Registry中下載該鏡像並保存到本地

分類

Registry用於保存docker鏡像,包括鏡像的層次結構和元數據:
1. Sponsor Registry:第三方的registry,供客戶和Docker社區使用
2. Mirror Registry:第三方的registry,只讓客戶使用
3. Vendor Registry:由發佈Docker鏡像的供應商提供的registry
4. Private Registry:經過設有防火牆和額外的安全層的私有實體提供的registry
注意:每一個倉庫能夠包含多個Tag,可是每個Tag只能屬於一個倉庫

Docker生產流程

Docker Registry中的鏡像一般由研發人員製做,然後推送至公共或私有Registry上保存,供其餘人員使用,而後部署到生產環境


1. Dockerfile
2. 基於容器製做
3. Docker Hub automated buildshtml

基於容器製做鏡像的實例

#  docker run --name b1 -it busybox
    # / # mkdir -p /data/html
    # / # vi /data/html//index.html
# docker commit -p b1 (製做image,此鏡像仍是以bysybox的sh啓動)
# docker tag 542b72efce7e linuxdevops/httpd:v1.0-1 (給鏡像標籤)
# docker tag linuxdevops/httpd:v1.0-1 linuxdevops/httpd:latest (加另外一個標籤)
# docker run --name t1  -it linuxdevops/httpd:v1.0-1 (啓動作的鏡像)
    # / # ls /data/html/index.html 
#  docker commit -a "evanliang" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 linuxdevops/httpd:v1.0-2
#  docker run --name t2  -it linuxdevops/httpd:v1.0-2
# curl 172.17.0.4 (新作的linuxdevops/httpd:v1.0-2能直接啓動httpd)
4. 在dockerhub上建立帳戶
    # docker tag f43e5c3f987c liangjindong/httpd (tag名字必定要和dockerhub上建立的REPOSITORY名字一致)
    # docker login -u liangjindong (登陸dockerhub)
        Password:
        WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
        Configure a credential helper to remove this warning. See
        https://docs.docker.com/engine/reference/commandline/login/#credentials-store
        Login Succeeded
    # docker push liangjindong/httpd (若是不帶tag,全部image孝會上傳到dockerhub)
    # 在dockerhub上,能夠看到


# 同時,能夠用國內阿里雲的鏡像服務dev.aliyun.com
# 配置鏡像加速:
針對Docker客戶端版本大於 1.10.0 的用戶
您能夠經過修改daemon配置文件/etc/docker/daemon.json來使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://sah48iqf.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
同時,能夠在阿里雲上建立鏡像倉庫,上傳:
# sudo docker tag 0dfafbbae68a registry.cn-beijing.aliyuncs.com/liangjindong/httpd:latest (用阿里雲指定的tag)
# sudo docker login --username=liangjindong registry.cn-beijing.aliyuncs.com (登陸)
# sudo docker push registry.cn-beijing.aliyuncs.com/liangjindong/httpd (上傳鏡像)
在阿里雲上檢查,成功

5. docker鏡像打包分發
# docker save -o myimages.gz liangjindong/httpd:latest liangjindong/httpd:v1.0
# docker load -i myimages.gz 把myimages.gz copy到另一臺docker服務器
鏡像打包分發須要提早把image本地準備好,不然運行docker run時還會去dockerhub默認的Registry下載。linux

Docker Hub

集中存儲各類Docker鏡像
Github他Docker hub來實現鏡像的Automated Builds

相關文章
相關標籤/搜索