Docker入门——什么是docker、Dockerfile实例

Docker

教程 https://docs.docker.com

  1. 设置Docker环境
  2. 构建映像并将其作为一个容器运行
  3. 扩展您的应用程序以运行多个容器
  4. 在群集中分发您的应用
  5. 通过添加后端数据库来堆栈服务
  6. 将您的应用部署到生产环境

Docker简介:

docker是开发人员和系统管理员 使用容器开发,部署和运行应用程序的平台。轻量级(较VM而言)

  • 应用程序没有系统依赖性
  • 可以将更新推送到分布式应用程序的任何部分
  • 资源密度可以优化

与虚拟机的区别:

虚拟机是一个系统,容器是一个进程。

一、Docker安装部署

1.1 安装环境

系统环境:CentOS 7.3.1611

1.2 安装方式

① yum安装 ②离线安装

1.2.1 yum安装过程

1.2.1.1 安装依赖

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

扫描二维码关注公众号,回复: 6021123 查看本文章

1.2.1.2 配置yum国内源

$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.2.1.3 安装

安装docker-ce

$ sudo yum makecache fast

$ sudo yum install docker-ce

查看docker-ce列表,以便安装指定版本

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64 17.12.ce-1.el7.centos docker-ce-stable

yum install -y docker-ce-18.03.0.ce

1.2.2 离线安装

1.2.2.1 下载安装包

curl https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

1.2.2.2 删除docker-ce

yum remove docker-ce

1.2.2.3 删除docker存储

rm -rf /var/lib/docker

1.3 启动Docker服务

systemctl enable docker

systemctl start docker

查看服务是否启动正常

systemctl status docker(结果如下证明正确)

1.4 测试Docker安装

1.4.1 测试版本

docker --version

1.4.2测试安装

1.通过运行简单的Docker镜像hello-world来测试您的安装是否有效

docker image pull library/hello-world(library/hello-world是 image 文件在仓库里面的位置,其中library是 image 文件所在的组。由于 Docker 官方提供的 image 文件,都放在library组里面,所以它的是默认组,可以省略)pull之后在本机就可以看到这个image文件了。(docker images ls)

docker run hello-world (run会自动提取,所以上一步pull可以省略)

2.列出hello-world下载到您的计算机的图像

docker image ls

3.hello-world运行后,容器自动终止。下述可以执行过的容器

docker container ls -a

4.有些容器不会自动停止,需用下法手动停止。

docker container kill [containID]

1.5 docker命令

docker命令汇总:

docker run ubuntu echo hello docker 这里ubuntu是一个image,如果本地没有这个image会从

Registry去下载。

docker images 当前本地有的image镜像

docker ps 当前运行的docker的container(容器)这里的CONTAINER ID是docker容器的id

docker stop CONTAINER ID 停止当前container

注:docker在容器内做的操作都是暂时的,为持久化保存,进行 下列设置,实质上是产生了一个新的Image

docker commit -m 'fun' CONTAINER ID nginx-fun ( -m 'fun'是container的message,nginx-fun 是新的image的名称)

docker rmi IMAGE ID 删除image

容器也可以删除

docker ps -a 所有的container(停止了也显示)

docker rm CONTAINER ID 删除容器

二、容器——使用Docker方式构建应用程序

在过去,如果您要开始编写Python应用程序,那么您的第一个业务是在您的计算机上安装Python运行时。使用Docker,您可以将可移植的Python运行时作为映像获取,无需安装。

Docker拖取镜像,镜像运行状态——>容器。

2.1 创建Dockerfile(例子1)

#使用一个官方的Python运行时作为父映像

FROM python:2.7-slim

将工作目录设置为/app

WORKDIR /app

#将当前目录内容复制到/app的容器中。

ADD . /app

#安装requirements.txt中指定的任何需要的软件包

RUN pip install --trusted-host pypi.python.org -r requirements.txt

#使端口80可以在这个容器之外的世界上使用。

EXPOSE 80

#定义环境变量

ENV NAME World

当容器启动时运行app.py

CMD ["python", "app.py"]

Volume:提供独立于容器之外的持久化存储

2.2 创建Dockerfile(例子2)

首先,在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容。

.gitnode_modules npm -debug.log

上面代码表示,这三个路径要排除,不要打包进入 image 文件。如果你没有路径要排除,这个文件可以不新建。

然后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的内容。

FROM node:8.4

COPY ./app

WORKDIR /app

RUN npm install--registry=https://registry.npm.taobao.org

EXPOSE 3000

上面代码一共五行,含义如下。

FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。

COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。

WORKDIR /app:指定接下来的工作路径为/app。

RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。

EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。

三、Registry

$docker search whalesay

$docker pull whalesay

$docker push myname/whalesay

Docker常见命令

容器相关操作

  • docker create # 创建一个容器但是不启动它
  • docker run # 创建并启动一个容器
  • docker stop # 停止容器运行,发送信号SIGTERM
  • docker start # 启动一个停止状态的容器
  • docker restart # 重启一个容器
  • docker rm # 删除一个容器
  • docker kill # 发送信号给容器,默认SIGKILL
  • docker attach # 连接(进入)到一个正在运行的容器
  • docker wait # 阻塞到一个容器,直到容器停止运行

获取容器相关信息

  • docker ps # 显示状态为运行(Up)的容器
  • docker ps -a # 显示所有容器,包括运行中(Up)的和退出的(Exited)
  • docker inspect # 深入容器内部获取容器所有信息
  • docker logs # 查看容器的日志(stdout/stderr)
  • docker events # 得到docker服务器的实时的事件
  • docker port # 显示容器的端口映射
  • docker top # 显示容器的进程信息
  • docker diff # 显示容器文件系统的前后变化

导出容器

  • docker cp # 从容器里向外拷贝文件或目录
  • docker export # 将容器整个文件系统导出为一个tar包,不带layers、tag等信息

执行

  • docker exec # 在容器里执行一个命令,可以执行bash进入交互式

镜像操作

  • docker images # 显示本地所有的镜像列表
  • docker import # 从一个tar包创建一个镜像,往往和export结合使用
  • docker build -t hello_docker . # 使用Dockerfile创建镜像(推荐)
  • docker commit # 从容器创建镜像
  • docker rmi # 删除一个镜像
  • docker load # 从一个tar包创建一个镜像,和save配合使用
  • docker save # 将一个镜像保存为一个tar包,带layers和tag信息
  • docker history # 显示生成一个镜像的历史命令
  • docker tag # 为镜像起一个别名

镜像仓库(registry)操作

  • docker login # 登录到一个registry
  • docker search # 从registry仓库搜索镜像
  • docker pull # 从仓库下载镜像到本地
  • docker push # 将一个镜像push到registry仓库中

猜你喜欢

转载自blog.csdn.net/lishuan182/article/details/81450359