1. 程式人生 > >Docker簡單介紹

Docker簡單介紹

sta 內部 都在 conf 系統 logrotate ping con 主機

記得第一次知道容器這個詞是2016年(技術渣),那時Openstack還如日中天,我安裝了一個Ubuntu,翻了翻文檔, 百度看了下僅有的幾個博客,用蹩腳的操作安裝上Docker(那時還部分ce,ee)就那幾分鐘,Docker就可以實現部署好幾種應用來完成我的測試,發現docker這真是個神器,到今天為止,我也沒有玩明白docker(沒有長期的投入實踐),包括以後的Kubernetes,Openshift,Rancher等等這些PaaS平臺,也僅僅是部署,這裏就不說原因了;從今天起,開始復習這些略識之無的東西,今天先復習一下命令。

安裝Docker

這裏以Centos7為例:

  1. 卸載系統自帶的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
  1. 添加Docker yum存儲庫
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 安裝docker-ce
yum install -y docker-ce
  1. 啟動docker服務
systemctl enable docker ; systemctl start docker
  1. 測試
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簡單介紹