Docker簡單介紹
記得第一次知道容器這個詞是2016年(技術渣),那時Openstack還如日中天,我安裝了一個Ubuntu,翻了翻文檔, 百度看了下僅有的幾個博客,用蹩腳的操作安裝上Docker(那時還部分ce,ee)就那幾分鐘,Docker就可以實現部署好幾種應用來完成我的測試,發現docker這真是個神器,到今天為止,我也沒有玩明白docker(沒有長期的投入實踐),包括以後的Kubernetes,Openshift,Rancher等等這些PaaS平臺,也僅僅是部署,這裏就不說原因了;從今天起,開始復習這些略識之無的東西,今天先復習一下命令。
安裝Docker
這裏以Centos7為例:
- 卸載系統自帶的docker
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
- 添加Docker yum存儲庫
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安裝docker-ce
yum install -y docker-ce
- 啟動docker服務
systemctl enable docker ; systemctl start docker
- 測試
docker run hello-world
如果需要卸載 記得卸載後刪除 /var/lib/docker
目錄
Docker 概念
Docker是開發人員和系統管理員 使用容器開發,部署和運行應用程序的平臺。使用Linux容器部署應用程序稱為容器化。容器不是新的,但它們用於輕松部署應用程序。
容器化越來越受歡迎,因為容器是:
- 靈活:即使是最復雜的應用也可以集裝箱化。
- 輕量級:容器利用並共享主機內核。
- 可互換:您可以即時部署更新和升級。
- 便攜式:您可以在本地構建,部署到雲,並在任何地方運行。
- 可擴展:您可以增加並自動分發容器副本。
- 可堆疊:您可以垂直和即時堆疊服務。
images 和 containers
通過運行image啟動容器,一個image是一個可執行的包,其中包括運行程序所需的所有內容和代碼、運行時環境、依賴庫、環境變量和配置文件。
這裏不說內部實現,從目的來看,啟動一個容器的目的是為了運行一個程序,虛擬機則是安裝配置一個應用程序,容器可以省去一些重復工作, 提高效率;容器運行, 在操作系統看來,就是一個獨立進程,完成了沙盒應用的功能,而虛擬機則運行了一個“完整的GuestOS”,通過虛擬機管理程序(hypervisor )對主機進行虛擬訪問。
Docker 基本命令
基本信息查看命令
## List Docker CLI commands
docker
docker container --help
## Display Docker version and info
docker --version
docker version
docker info
## Execute Docker image
docker run hello-world
## List Docker images
docker image ls
## List Docker containers (running, all, all in quiet mode)
docker container ls
docker container ls --all
docker container ls -aq
簡單Dockerfile
Dockerfile例子
# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
基於Dockerfile構建應用鏡像
docker build -t image-name .
查看基於Dockerfile構建的鏡像
docker image ls
運行容器
docker run -d -p 4321:80 testimage
待容器運行,會基於名為testimage的鏡像後臺運行一個容器,並且將容器內部的80端口映射到本機4321端口,如果容器80端口將可以訪問,現在則可以訪問宿主機ip:4321
來訪問容器內部的80端口。
發布鏡像
可以將本地的鏡像發布到dockerhub, 隨處下載運行自己的鏡像,
首先你需要創建一個dockerhub賬戶.
本地登錄dockerhub
docker login
標記鏡像
docker tag image username/repository:tag
例如
docker tag testimage xieth/mytestimage:v1
查看新標記的image
# 以下兩行命令功能相同
docker image ls
docker images
現在可以從其他計算機運行剛才發布的鏡像了。
docker run -p 4321:80 xieth/mytestimage:v1
基本命令整理
docker build -t friendlyhello . # Create image using this directory‘s Dockerfile
docker run -p 4000:80 friendlyhello # Run "friendlyname" mapping port 4000 to 80
docker run -d -p 4000:80 friendlyhello # Same thing, but in detached mode
docker container ls # List all running containers
docker container ls -a # List all containers, even those not running
docker container stop <hash> # Gracefully stop the specified container
docker container kill <hash> # Force shutdown of the specified container
docker container rm <hash> # Remove specified container from this machine
docker container rm $(docker container ls -a -q) # Remove all containers
docker image ls -a # List all images on this machine
docker image rm <image id> # Remove specified image from this machine
docker image rm $(docker image ls -a -q) # Remove all images from this machine
docker login # Log in this CLI session using your Docker credentials
docker tag <image> username/repository:tag # Tag <image> for upload to registry
docker push username/repository:tag # Upload tagged image to registry
docker run username/repository:tag # Run image from a registry
小結
docker 的命令風格跟linux幾乎一樣,忘了直接docker --help
看下幫助,其實這些命令就現在看來幾乎用不上,現在大家都在關註容器上層的集群編排,大部分不需要用手動敲命令來一個個實現, 而是通過標記語言yaml來實現容器的構建與運行。
Docker簡單介紹