顯示具有 DOCKER 標籤的文章。 顯示所有文章
顯示具有 DOCKER 標籤的文章。 顯示所有文章

2025年6月22日 星期日

Handbook - docker

FAQ


Q: How to customize a container's hostname?

A:

    docker run -dit -p ${SSH_PORT}:22 \

               -v /build:/work \

               -v /home/:/home/ \

               -v /nas:/HOUSE \

               -v /etc/profile.d:/etc/profile.d \

               -v /etc/group:/etc/group:ro \

               -v /etc/passwd:/etc/passwd:ro \

               -v /etc/shadow:/etc/shadow:ro \

               -h ${CONTAINER_HOSTNAME} \

               --name ${CONTAINER_NAME} ${IMAGE_ID} /bin/bash


Q: How to address 
"docker load --input image.tar.gz in Ubuntu 20.04 fails with no space left on device"
A1: Build docker image on top of host OS, ie. Ubuntu 20.04 in this case.
or
The current best practice is:
docker system prune
Note the output from this command prior to accepting the consequences:
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache
Are you sure you want to continue? [y/N]
In other words, continuing with this command is permanent. Keep in mind that best practice is to treat stopped containers as ephemeral i.e. you should be designing your work with Docker to not keep these stopped containers around. You may want to consider using the --rm flag at runtime if you are not actively debugging your containers.
Make sure you read this answer, re: Volumes

You may also be interested in this answer, if docker system prune does not work for you.


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

# Check all the docker container/images

docker container ls

docker image ls

 

# Docker stop

docker stop <container id>

 

# Docker delete

docker rm <container id>

 

#Docker run

docker run <container id>

 

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

# Load docker image

docker load --input <xxx>.tar.gz

 

# change image name (optional)

docker image tag <docker image id> <image_name>:<version>

ex:

docker image tag b9ffda36b031 build_sa525m_env:latest

 

# run container

./execute.sh -p 1234 -n <container name> -I <container id>

 


2017年12月5日 星期二

10個Q&A快速認識Docker

 Source: https://www.ithome.com.tw/news/91847

Docker和虛擬化技術有何不同?Container和虛擬機器有什麼不同?10個問答讓你快速認識什麼是Docker

不論是Google、Amazon、微軟、VMware都紛紛擁戴,加入Docker和Container所掀起的新世代雲端虛擬化行列,這2項技術成為了IT界的新顯學。Docker和Container到底是什麼?以下10個Q&A告訴你。
Q1:Container技術和伺服器虛擬化是一樣的技術嗎?
A:不是。兩者雖然都屬於虛擬化的技術,目標都是為了將一套應用程式所需的執行環境打包起來,建立一個孤立環境,方便在不同的硬體中移動,但兩者的 運作思維截然不同。簡單來說,常見的傳統虛擬化技術如vSphere或Hyper-V是以作業系統為中心,而Container技術則是一種以應用程式為 中心的虛擬化技術。
傳統虛擬化技術從作業系統層下手,目標是建立一個可以用來執行整套作業系統的沙箱獨立執行環境,習慣以虛擬機器(Virtual Machine)來稱呼。而Container技術則是直接將一個應用程式所需的相關程式碼、函式庫、環境配置檔都打包起來建立沙箱執行環境,為了和傳統 虛擬化技術產生的虛擬機器區分,Container技術產生的環境就稱為Container。
Q2:一般常見的虛擬機器和Container有何不同?
A:最明顯的差別是,虛擬機器需要安裝作業系統(安裝Guest OS)才能執行應用程式,而Container內不需要安裝作業系統就能執行應用程式。Container技術不是在OS外來建立虛擬環境,而是在OS內 的核心系統層來打造虛擬執行環境,透過共用Host OS的作法,取代一個一個Guest OS的功用。Container也因此被稱為是OS層的虛擬化技術。
Q3:為何Container是輕量級虛擬化技術?
A:因為Container技術採取共用Host OS的作法,而不需在每一個Container內執行Guest OS,因此建立Container不需要等待作業系統開機時間,不用1分鐘或幾秒鐘就可以啟用,遠比需要數分鐘甚至數十分鐘才能開啟的傳統虛擬機器來的快。
Q4:Container技術是全新的技術嗎?
A:不是,早在1982年,Unix系統內建的chroot機制也是一種Container技術。其他如1998年的FreeBSD jails、2005年出現的Solaris Zones和OpenVZ,或像是Windows系統2004年就有的Sandboxie機制都屬於在作業系統內建立孤立虛擬執行環境的作法,都可稱為是 Container的技術。
直到2013年,dotCloud這家PaaS服務公司開源釋出了一套將Container標準化的平臺Docker,大受歡迎,所以,dotCloud決定以Docker為名成立新公司力推。
Q5:Docker如何實現Container標準化?
A:Docker採用了aufs檔案系統來設計一個可以層層堆疊的Container映象檔,將Container內的所有程式(包括應用程式、相 關函式庫、設定檔),都打包進Docker映象檔,並且提供了一個Dockerfile設定檔來記錄建立Container過程的每一個步驟包括參數。只 要在任何支援Docker平臺的環境中,就可以從這個映象檔來建立出一個一模一樣的Container來執行同一個應用程式。如此一來,應用程式等於是可 以透過Docker映象檔,或甚至只需要Dockerfile,就能將程式執行環境帶著走,移動到任何支援Docker的環境中。Docker公司也釋出 API,可以用來控制所有的Container相關指令,任何人只要使用同一套Docker,就等於有了同一套管理和建立Container的方法,也就 等同於將Container運用標準化了。
Q6:一個Container映象檔內可以安裝多少應用程式?
A:一個Container的映象檔內可以安裝多支程式,例如同時安裝Ubuntu、Apache、MySQL、Node.js、Ruby等。不過,Docker官方建議,一隻程式安裝在一個Container內,再把這些Container疊起來提供一個完整的服務。
Docker稱這是一種Microservices(微服務)的新軟體架構,將組成一個應用系統的每一個Stack,拆解成許多小型服務,例如 Apache服務、MySQL服務、Node.js服務、Ruby服務,每一個服務都是包在Container裡的一隻程式,例如MySQL服務就是部署 在Container內的MySQL。
這麼做的好處是可以建立一個鬆散耦合的彈性應用程式架構,也能輕易地抽換其中一個Container,例如要升級MySQL,只需要重新載入新版MySQL的Container映象檔,就可以完成資料庫升級,不用將整套應用系統停機。
Q7:Container內不是不需要OS,為何需要OS的基礎映象檔?
A:OS基礎映象檔的用途是讓Container擁有這OS的檔案系統,例如使用ubuntu基礎映象檔就可以讓Container建立ubuntu的根目錄架構,而不是用來執行一個OS執行實例。
Q8:Docker對Devops有何幫助?
A:因為Docker透過Dockerfile來記錄建立Container映象檔的每一個步驟,可以將建立應用程式執行環境的過程和配置參數,完 整地記錄下來。開發人員和維運人員之間可以利用Dockerfile來溝通對執行環境的討論。甚至結合版本控制服務如GitHub,可以讓 Dockerfile具備版本控制功能,能將基礎架構程式化(Infrastructure as code)來管理。
Q9:可以在Windows Server環境中執行Docker嗎?
A:還不行。目前Docker只能在Linux平臺上執行,但是微軟10月中剛宣布要在下一波Windows Server改版時內建Docker引擎,未來同一份Docker映象檔能否跨Linux和Windows OS,還需待微軟揭露更多細節才能得知。
Q10:在臺灣,如何找到懂Docker技術的人?
A:目前Docker公司還未在臺設點,但有一個Docker Taipei社群,成員截至10月有383人。
Docker Taipei也預計配合Docker總公司舉辦的全球HackDay活動,在11月1日舉辦臺北場HackDay。參加作品將直接發布到美國和全球Docker開發者一起評比,獎品是明年到美國參加Docker技術大會的資格。