四十年来家国
三千里地山河
概念
云计算与Docker
云计算即是通过网络将虚拟化的资源作为服务提供,通常有IaaS(基础设施即服务)、SaaS(软件即服务)、PaaS(平台即服务三种。云计算具有用户机不需要相应的IT环境,只需通过网络接入的特性。
Docker是基于轻量级虚拟化技术的容器引擎,基于Go语言,可以在容器内部快速自动化部署应用,并通过内核虚拟化技术来提供容器的资源隔离和安全保障。
Docker
- 特点
- 低资源消耗
- 快速启动
- 应用耦合更好
- 弹性部署
- 核心概念
- Containers
负责程序运行,包括操作系统、用户添加的文件和元数据 - Images
一个只读模版,用来运行Docker容器 - Repository
集中存放镜像文件的地方
- Containers
简单使用
安装
Cent OS环境下:
#add docker ropo
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#install docker
yum install -y docker-ce
测试是否安装成功:
#start the service
sudo service docker start
#check the version of docker
docker version
部分回显如下:
Client: Docker Engine - Community
Version: 19.03.2
API version: 1.40
Go version: go1.12.8
配置
为了避免每次都使用特权身份,将目前的用户加入docker用户组
#add current user to docker group
sudo usermod -aG docker username
#restart the service
sudo service docker restart
使用镜像
利用docker获取一个ubuntu镜像:
sudo docker pull ubuntu
使用该镜像:
docker run -it ubuntu bash
回显如下:
root@9502a3831d43:/# ll
total 72
drwxr-xr-x. 1 root root 4096 Sep 26 10:28 ./
drwxr-xr-x. 1 root root 4096 Sep 26 10:28 ../
-rwxr-xr-x. 1 root root 0 Sep 26 10:28 .dockerenv*
drwxr-xr-x. 2 root root 4096 Sep 12 20:54 bin/
drwxr-xr-x. 2 root root 4096 Apr 24 2018 boot/
drwxr-xr-x. 5 root root 360 Sep 26 10:28 dev/
drwxr-xr-x. 1 root root 4096 Sep 26 10:28 etc/
drwxr-xr-x. 2 root root 4096 Apr 24 2018 home/
drwxr-xr-x. 8 root root 4096 May 23 2017 lib/
drwxr-xr-x. 2 root root 4096 Sep 12 20:53 lib64/
drwxr-xr-x. 2 root root 4096 Sep 12 20:53 media/
drwxr-xr-x. 2 root root 4096 Sep 12 20:53 mnt/
drwxr-xr-x. 2 root root 4096 Sep 12 20:53 opt/
dr-xr-xr-x. 97 root root 0 Sep 26 10:28 proc/
drwx------. 2 root root 4096 Sep 12 20:54 root/
drwxr-xr-x. 1 root root 4096 Sep 18 23:20 run/
drwxr-xr-x. 1 root root 4096 Sep 18 23:20 sbin/
drwxr-xr-x. 2 root root 4096 Sep 12 20:53 srv/
dr-xr-xr-x. 13 root root 0 Sep 26 10:28 sys/
drwxrwxrwt. 2 root root 4096 Sep 12 20:54 tmp/
drwxr-xr-x. 1 root root 4096 Sep 12 20:53 usr/
drwxr-xr-x. 1 root root 4096 Sep 12 20:54 var/
查看已有镜像:
#get a list of images
docker images
#get details
docker inspect image-name
#get the history
docker history image-name
#search a image
docker search --automated -s 3 image-name
删除镜像:
docker rmi image-name
查看容器:
#check current running containers
docker ps -a
创建、存出、存入、上传镜像:
#commit new images
docker commit -m message -a authorinfo containerid name-version
#load images
docker load --input name
#save images
docker save -o name
#upload images
docker push uesr/name:version
容器操作
创建、终止容器
#create container
docker create -it ubuntu:latest
#stop container
docker stop ubuntu:latest
#start a container background
docker start -d name
数据操作
- 数据卷
一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器 - 创建一个数据卷容器
docker run -it -v /dbdata --name dbdata ubuntu
- 其他容器挂载
docker run -it --volumes-from dbdata --name cn1 ubuntu
端口映射
- 随机映射
docker run -d -P --name co2 nginx
- 指定映射
docker run -d -p 127.0.0.1:5000:80 --name co2 nginx
-
容器互联
#create database container docker run -d --name db redis #create a web container linking to database docker run -d --name web --link db:db nginx
Dockerfile
shell 格式: RUN <命令> ,RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
exec 格式: RUN ["可执行文件", "参数1", "参数2"] 。run可以写多个,每一个指令都会建立一层,所以正确写法应该是↓
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
示例:
FROM centos:7
MAINTAINER https://blog.51cto.com/andyxu
ENV TIME_ZOME Asia/Shanghai
ARG NV="nginx-1.14.0"
COPY nginx.conf /data/nginx/conf/
ADD $NV.tar.gz /tmp
RUN yum -y install gcc gcc-c++ make openssl-devel pcre-devel \
&& mkdir -p /data \
&& cd /tmp/$NV \
&& ./configure --prefix=/data/nginx \
&& make -j 2 \
&& make install \
&& echo "${TIME_ZOME}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime \
&& rm -rf /tmp/nginx* \
&& yum clean all \
&& yum -y remove gcc gcc-c++ make
WORKDIR /data/nginx/
EXPOSE 80
CMD ["./sbin/nginx","-g","daemon off;"]
构建:
docker build -t <path> <targetpath>