摘要:一安裝快捷安裝快捷安裝參考手動安裝先查看內核,更新包要求系統的內核版本安裝依賴包設置國內鏡像源如果安裝過,卸載舊版本查看倉庫中所有,安裝測試啟動關閉服務加入隨機啟動二常用命令每次使用命令都需要,
一、docker安裝 1、快捷安裝
快捷安裝參考:https://get.daocloud.io/#inst...
curl -sSL https://get.daocloud.io/docker | sh2、手動安裝
1.)先查看內核,更新yum包
docker要求CentOS系統的內核版本>3.10
$ uname -r $ sudo yum update
2.)安裝依賴包
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.)設置國內docker鏡像源
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.)如果安裝過,卸載舊版本
$ sudo yum remove docker docker-common docker-selinux docker-engine
5.)查看倉庫中所有docker,安裝
$ yum list docker-ce --showduplicates | sort -r $ sudo yum install docker-ce $ docker -v # 測試3、啟動/關閉docker服務**
$ sudo systemctl start docker $ sudo systemctl stop docker # 加入隨機啟動 $ sudo systemctl enable docker二、docker常用命令
每次使用docker命令都需要sudo,比較麻煩,可以通過以下命令添加當前用戶到docker附屬組:
$ sudo usermod -aG docker 當前用戶名 # 需要注銷后登錄生效
1.)查看容器/鏡像
$ docker ps # 查看本地容器 $ docker images # 查看本地鏡像 # 查看容器詳情 $ docker inspect xxx # 查看容器top進程 $ docker top xxx
2.)下載鏡像
創建容器前,可先下好遠程鏡像,也可以在創建時再下載
# 先查找遠程鏡像 $ docker search xxx $ docker pull xxx
3.)新建容器
最少參數的創建
# -d:表示后臺運行,-it:表示以交互的方式創建,可視化時可通過console打開 $ docker run -d -it --name 容器名 --restart always 鏡像名
更多參數:映射端口、dns、持久存儲卷、初始化進程防容器退出
# -p:映射端口,--dns:有些容器默認dns解析服務配置不對(/etc/resolv.conf),-v:映射路徑(可重復多個),/bin/sh:保持一個進程運行,否則容器會退出 $ docker run -dit -p 宿主端口:容器端口 --dns=8.8.8.8 --name 容器名 -v 宿主路徑:容器路徑 --restart always 鏡像:標簽 /bin/sh
docker中安裝centos無法使用systemctl命令管理進程,報以下錯誤:
Failed to get D-Bus connection: Operation not permitted
原因:需要特權才能啟動systemd進程,解決方案:
docker run -dit --privileged 其它參數 init
4.)啟動/停止容器
$ docker start | restart xxx # 啟動/重啟 $ docker stop xxx # 停止容器 $ docker kill xxx # 強行終止,關閉進程
5.)進入容器
# 多窗口同時進入,會同步顯示,容易窗口阻塞,適合本地開發 $ docker attach xxx # 或者,docker在1.3.X版本,新命令 $ docker exec -it xxx /bin/bash
6.)刪除容器/鏡像
# 刪除容器前,先停止 $ docker stop xxx $ docker rm xxx # 刪除鏡像 $ docker rmi xxx # -f 強制刪除
7.)容器/鏡像改名
# 容器改名 $ docker rename 原容器名 新容器名 # 鏡像改名 $ docker tag 原鏡像 新鏡像 # 會生成一個新名,鏡像id一樣 $ docker rmi 原鏡像三、鏡像構建 1、手動構建鏡像
用基礎鏡像創建一個容器,手動安裝好一切,然后用容器生成鏡像:
$ docker commit 容器名 新鏡像名2、自動構建鏡像:Dockerfile
1.)Dockerfile配置
新建Dockerfile并配置相關內容,下面以配置一個基于alpine的pm2安裝并運行node應用為例:
# 基礎鏡像源 FROM alpine # 創建者信息 MAINTAINER hoby#修復時區 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone # RUN命令:構建過程中執行,常用于安裝軟件包 RUN echo "nameserver 8.8.8.8" >> /etc/resolv.conf && apk update && apk add bash && apk add nodejs && apk add npm && npm config set registry https://registry.npm.taobao.org && npm i -g pm2 # 指定工作目錄,用絕對 WORKDIR /app # 從宿主機copy到容器 #COPY ./www.js /app # 與COPY類似,但ADD自帶解壓功能 #ADD ./x.tar.xz /app # 定義環境變量 ENV NODE_ENV=production # 配置entrypoint入口腳本 RUN echo "console.log("this is node web!")" > ./www.js && echo "#!/bin/bash" > ./entrypoint.sh && echo "pm2 start /app/www.js" >> ./entrypoint.sh && echo "/bin/sh" >> ./entrypoint.sh && chmod a+x ./entrypoint.sh # 容器啟動后執行的命令,且不可被docker run提供的參數覆蓋 ENTRYPOINT ["/bin/sh", "./entrypoint.sh"] # 容器啟動后默認執行的命令,可被docker run后面的參數代替 #CMD ["/bin/sh"] # 暴露端口 EXPOSE 80
運行構建命令:
$ docker build -t myimage:latest . # 鏡像名需小寫 # 新建并啟動容器 $ docker run -dit -p 8000:80 --dns=8.8.8.8 --name 容器名 --restart always myimage:latest
2.)Dockerfile構建總結
a. 構建時下載不了軟件包,說明容器dns不對,需修改/etc/resolv.conf
b. alpine鏡像默認sh終端,需安裝bash
c. 建議一個容器只運行單個應用,多個應用見下文compose部署
d. Docker鏡像構建是分層,將多個RUN指令合并
e. -v持久化路徑時,若宿主機路徑是新建的,容器路徑內容會被清空
f. 當ENTRYPOINT與CMD使用exec參數時需雙引號
g. 添加.dockerignore,提高編譯速度:
.git/ node_modules/四、多個應用容器部署
Docker Compose是一個管理多容器應用的工具1、docker-compose安裝
Compose下載地址: https://get.daocloud.io/#inst...
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose2、docker-compose文件配置
新建docker-compose.yml,下面以nginx+node+mongo+redis聯合容器配置為例:
version: "3" services: web: image: nginx container_name: encore-web restart: always ports: - 18001:8001 volumes: - ./bin/nginx.conf:/etc/nginx/conf.d/encore.conf - ./web/dist:/app/encore/web command: ["nginx", "-g", "daemon off;"] links: - server server: image: keymetrics/pm2 container_name: encore-server restart: always ports: - 18100:8100 volumes: - ./server:/app/encore/server working_dir: /app/encore/server environment: - MONGO_SERVER=mongo - MONGO_PORT=27017 - REDIS_SERVER=redis - REDIS_PORT=6379 command: npm start links: - mongo - redis mongo: image: mongo container_name: encore-mongo restart: always ports: - 18017:27017 volumes: - ./mongo/configdb:/data/configdb - ./mongo/db:/data/db command: mongod --auth redis: image: redis container_name: encore-redis restart: always ports: - 18379:6379 volumes: - ./redis/data:/data - ./bin/redis.conf:/usr/local/etc/redis.conf command: redis-server /usr/local/etc/redis.conf
需要注意的:
a.) command支持exec和shell兩種模式(見上面的web和server)
b.) nginx、pm2等進程需加--no-daemon參數使其在前臺運行,以保證容器不退出
c.) npm start需要設置工作目錄
d.) links后,在容器可直接把服務名做為一個hostname訪問,如下:
# nginx反向代理 proxy_pass http://server:8100/; # mongo連接 mongodb://mongo:27017/encore # node容器可先設置環境變量,再動態獲取 "mongodb://www:123456@" + process.env.MONGO_SERVER + ":" + process.env.MONGO_PORT + "/encore"
在docker-compose.yml同目錄下,創建啟動/更新容器:
$ docker-compose up -d # -d后臺運行3、docker-compose常用命令
在docker-compose.yml同一目錄下
# 創建并啟動容器 $ docker-compose up -d # 重啟容器 $ docker-compose restart # 查看yml配置 $ docker-compose config # 停止容器 $ docker-compose stop # 停止并移除容器 $ docker-compose down五、可視化容器管理工具
Portainer是一個輕量級的Docker環境UI界面管理系統1、快速部署
$ docker volume create portainer_data # 在宿主機創建持久化目錄 $ docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer2、相關配置
1.)交互模式
創建容器時,在高級設置里,Console項記得勾選交互模式,否則無法使用控制臺
[x] Interactive & TTY (-i -t)
2.)入口命令
在容器高級設置里,command里的shell命令必須單個加引號,如:
Command: "pm2" "start" "./www.js" "--no-daemon" Working Dir: /app
3.)volume添加
portainer中volume默認在/var/lib/docker/volumes下,通過點擊bind按鈕修改/自定義對應的host路徑
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27765.html
摘要:容器鏡像運行后,此時就實例化了一個容器。側重的是應用級別,而虛擬機是徹底隔離整個運行環境。方便交付將應用以及運行環境打包成一個鏡像,交付更簡單高效。下載地址點擊運行即可一如既往的下一步下一步完成安裝。 Docker是什么 Docker是一款由DotCloud公司(現改名為Docker)基于Go語言開發的開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發...
摘要:核心對名字空間的支持完全隔離了工作環境中應用程序的視野,包括進程樹網絡用戶與掛載文件系統,而核心的提供資源隔離,包括存儲器與網絡。因此更為輕量快速和易于管理。 docker 如日中天,這不是單純的炒概念,docker 確確實實解決了開發與運維的痛點,因此在企業開發中得到了非常廣泛的使用,本文對于 docker 的這些基本知識點再做一些簡單回顧。 什么是 docker 根據 wikip...
摘要:一安裝快捷安裝快捷安裝參考手動安裝先查看內核,更新包要求系統的內核版本安裝依賴包設置國內鏡像源如果安裝過,卸載舊版本查看倉庫中所有,安裝測試啟動關閉服務加入隨機啟動二常用命令每次使用命令都需要, 一、docker安裝 1、快捷安裝 快捷安裝參考:https://get.daocloud.io/#inst... curl -sSL https://get.daocloud.io/doc...
閱讀 2947·2021-09-23 11:32
閱讀 2918·2021-09-22 15:12
閱讀 1708·2019-08-30 14:07
閱讀 3448·2019-08-29 16:59
閱讀 1640·2019-08-29 11:11
閱讀 2307·2019-08-26 13:50
閱讀 2426·2019-08-26 13:49
閱讀 2620·2019-08-26 11:49