做者: 麥冬 白鯨魚
Docker 入門教程html
Docker容器是與系統其餘部分隔離開的一系列進程,運行這些進程所需的全部文件都由另外一個鏡像提供,從開發到測試再到生產的整個過程當中,Linux 容器都具備可移植性和一致性。相對於依賴重複傳統測試環境的開發渠道,容器的運行速度要快得多,而且支持在多種主流雲平臺(PaaS)和本地系統上部署。Docker容器很好地解決了「開發環境能正常跑,一上線就各類崩」的尷尬。
》vue
看Docker操做手冊
寫的很詳細node
這裏說下二進制安裝,按照官網方式Install static binarieslinux
安裝docker在Centos基本上就是yuminstall便可的一件事情(在ubuntu也是apt-get很容易安裝),可是在實際環境中,可能遇到企業內網以內沒法鏈接,或者安全合規審查等問題,加之下載增長了安裝時間,所以二進制方式安裝變成了一種實際的須要。下面是官網的安裝方式
有些時候會在sudo docker &
時候出現錯誤
能夠執行如下下面命令再試。git
rm -rf /var/lib/docker
這裏提供寫好的腳本,能夠把腳本和下載的二進制文件放在同一目錄下,而後運行sh install-docker.sh
github
項目 | 下載地址 |
---|---|
二進制方式安裝docker腳本 | http://osgp88fat.bkt.clouddn.... |
二進制的docker安裝文件 | https://download.docker.com/l... |
sudo docker info
docker run
命令提供了Docker容器的建立到啓動的功能web
若是要在命令行下建立一個咱們能與之進行交互的容器,而不是一個運行後臺服務的容器,則-i
-t
這兩個參數是必不可少的基本參數。vue-cli
apt-get update && apt-get install vim //在容器中安裝vim
exit // 推出容器,返回到Ubuntu容器的宿主機命令行提示符中
sudo docker ps -a
加上-a
會顯示正在運行的 和已經中止的全部容器docker
通常docker會爲建立的容器生成隨機名稱,生成指定名稱用--name
shell
sudo docker run --name jxtreehouse -i -t ubuntu /bin/bash
像上面那樣,docker容器從新啓動時候,會沿用docker run
命令的參數來運行,所以咱們容器從新啓動後會運行一個交互式會話shell。
固然,咱們也能夠用docker attach
命令 從新附着到該容器的會話上
sudo docker attach jxtreehouse
除了交互式
運行的容器,咱們也能夠建立長期運行的容器:守護式容器
特色:
因此,大多數時候咱們都須要守護式運行咱們的容器
sudo docker run --name jxbooks -d ubuntu /bin/sh -c "while true;do echo hello jx;sleep 1; done"
從上面運行結果咱們能夠看出,docker run
命令並無像上一個容器那樣將主機的控制檯附着到新的shell會話上,僅僅返回一個容器ID而已,咱們仍是在主機的命令中。
### 查看日誌
sudo docker jxbooks sudo docker logs jxbooks // 獲取守護式容器日誌 sudo docker logs -f jxbooks // 跟蹤守護式容器的日誌(-f 相似 tail -f) sudo docker logs -ft jxbooks // 跟蹤守護式容器的最新日誌 (加上時間戳)
sudo docker top jxbooks
在Docker3.1以後,咱們能夠經過docker exec
命令在容器內部額外啓動新程序。
能夠在容器內運行的進程有兩種:
後臺任務例子:
sudo docker exec -d jxbooks touch /etc/new_config_file
在jxbooks容器中啓動一個如打開shell的交互任務:
sudo docker exec -t -i jxbooks /bin/bash
和交互式容器同樣,這裏-t
-i
標誌爲咱們執行的進程建立TTY並捕捉STDIN。
sudo docker stop jxbooks
jxbooks
也可用容器的ID來替代(查看id 可用 docker ps -a
)
sudo docker run --restart=always --name jxbooks -d ubuntu /bin/sh -c "while true; do echo hello world; sleep1;done"
--restart=always
不管容器的退出代碼是什麼,docker都會自動重啓容器
還能夠設置成 on-failure
(只有當容器退出代碼爲非 0 時候 纔會自動重啓)
--restart=on-failture:5 //重啓次數參數
sudo docker inspect jxbooks
sudo docker rm 容器名或id //注意運行中的docker容器沒法刪除,必須先docker stop 或者 docker kill 中止容器
刪除全部容器
docker rm `docker ps -a -q`
查看這個docker 入門.gitignore
.git node_modules npm-debug.log
Dockerfile
FROM node:8.4 COPY . /app WORKDIR /app RUN ["npm", "install"] EXPOSE 7001/tcp
zk@zk-TM1604:~/data-screen$ docker image build -t data-screen:0.0.1 . docker image ls zk@zk-TM1604:~/data-screen$ docker save data-screen:0.0.1 | gzip > data-screen.tar.gz zk@zk-TM1604:~/data-screen$ scp -r data-screen.tar.gz root@118.24.153.55:/root/
這時候咱們項目的根目錄下就有了一個docker的鏡像壓縮文件
在合做開發時候,咱們拿到一個項目打包好的docker鏡像(原開發環境爲ubuntu,咱們這裏拿到鏡像後 還用ubuntu作演示,實際開發時候,你多是在windows 或者centos中拿到這個項目鏡像來開發)
好比壓縮包名datascreen.tar
這裏我用遠程服務器演示下:
咱們在根目錄/
data文件夾中建一個docker
文件夾,進入文件夾,新建tmp
文件夾 ,在docker
同級目錄下新建 datascreen
文件夾 咱們將把項目docker鏡像文件映射到這裏
sudo docker load < ${PATH}/datascreen.tar //加載docker打包的鏡像 到本宿主機
sudo docker images //獲取image ID sudo docker run -d -it -p 7001:7001 -v /data/docker/tmp/:/tmp/ {image id} /bin/bash
/data/docker/tmp/
映射到的宿主機上的目錄/tmp/ {image id} /bin/bash
鏡像中的目錄
sudo docker ps //查看運行中的容器 sudo docker start f1737f42f13b //f1737f42f13b 是容器id sudo docker exec -it f1737f42f13b /bin/bash
cd data-screen/ nohup ./auto-run.sh &
auto-run.sh
腳本中的內容,主要是啓動mongod 和用node啓動入口文件index.js (這個項目是一個nodejs的後臺項目)
(!危險)
若是是運行在應用上的程序和服務的守護式容器 注意不要隨意中止
sudo docker ps
sudo docker stop <CONTAINER ID>
Docker操做手冊
第一本docker書
[Docker — 從入門到實踐]()
Docker 入門教程
Docker 微服務教程
基於docker+gunicorn部署sanic項目
vue-cli3 項目從搭建優化到docker部署