Docker是一个开源的应用容器引擎,它基于Go语言并遵从Apache2.0协议开源。容器技术是和我们的宿主机共享硬件资源及操作系统,实现资源的动态分配,在资源受到隔离的进程中运行应用程序及其依赖关系。
Docker可帮助更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。它的优点包括简化流程、避免选择恐惧症、节省开支等。
使用Docker可以将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。Docker目前是最流行的Linux容器解决方案。它的基本概念包括镜像(Image)、容器(Container)和仓库(Repository)。镜像是Docker运行容器的前提,仓库是存放镜像的场所。
Docker架构使用C/S结构,即客户端/服务器体系结构。其中,Docker daemon是一个运行在宿主机(DOCKER-HOST)的后台进程。
Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
Docker仓库是用于存储Docker镜像并可以通过Docker pull命令下载的云环境。Docker仓库分为公有仓库和私有仓库,公有仓库包括Docker Hub等开放给用户使用并允许用户管理镜像的仓库,私有仓库则是由用户自行搭建的存放镜像的云环境。在Docker中使用仓库之前需要登录Docker Hub或其他仓库,登录后可以通过Docker search命令查找需要下载的镜像。
Docker镜像
Usage: docker search [OPTIONS] TERM
Search the Docker Hub for images
Options:
-f, --filter filter 按照给定条件进行筛选
--format string Pretty-print search using a Go template
--limit int 限制查找个数,默认是25 (default 25)
--no-trunc Don't truncate output
如 docker search jenkins
docker images
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
docker run [OPTIONS] IMAGE [COMMAND]
[OPTIONS]常用参数有:
-i:启动一个可交互的容器,并持续打开标准输入。
-t:使用终端关联到容器的标准输入输出上。
-d:将容器放置后台运行
docker run有非常多参数,可以使用--help查看
如docker run hello-world,如果本地没有该镜像,会从仓库查找并拉取
我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
如图,run容器后,命令行显示了root@0123ce188bd8:/#,这个是容器内的命令行。
按Ctrl+D,可以退出容器。
使用以下命令创建一个以进程方式运行的容器
runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
参数-d,指定该容器运行方式为后台模式,返回的一串数字为容器ID,每个容器都有唯一的ID。
docker ps
Usage: docker ps [OPTIONS]
List containers
Options:
-a, --all 显示所有容器包含已停止容器
-f, --filter filter 根据给定条件过滤
--format string 使用go模板打印容器
-n, --last int
-l, --latest 显示最新创建的容器
--no-trunc 不截断输出
-q, --quiet 只显示容器ID
-s, --size 展示所有文件大小
使用 docker logs 命令,查看容器内的标准输出,常用来排查程序运行出错原因。
runoob@runoob:~$ docker logs 2b1b7a428627
使用 docker stop 容器id 命令来停止容器:
会输出容器ID
使用 docker start +容器ID 启动一个已停止的容器:
$ docker start b750bbbcfd88
进入Docker容器的命令为:
docker exec -it <容器ID或名称> /bin/bash
或者使用简写形式:
docker exec -it <容器ID或名称> sh
如
docker exec -it 7752222e1e1 /bin/bash
该命令会在指定的容器中启动一个交互式终端,允许您在容器内执行命令。容器的ID或名称可以是任何正在运行的容器的标识符。进入容器后,您可以在容器内执行任意命令。
输入exit或者按ctrl+D退出容器
删除容器使用 docker rm 命令
容器必须先停止再删除。
如果已有镜像不满足使用,我们可以创建自己的镜像,需要写Dockerfile文件。
Dockerfile是用来构建Docker镜像的构建文件,它是由一系列命令和参数构成的脚本。
创建一个文件命名为Dockerfile
# 指定基础镜像
FROM ubuntu:latest
# 设置工作目录
WORKDIR /app
# 将当前目录下的文件复制到容器的工作目录中
COPY . /app
# 安装Redis
RUN apt-get update && \
apt-get install -y redis-server && \
apt-get clean
# 设置容器启动命令
CMD ["redis-server", "/etc/redis/redis.conf"]
Dockerfile中,我们首先指定了基于Ubuntu的最新版本的基础镜像。
WORKDIR 设置了容器的工作目录为/app,这里目录是指容器内的目录。并将当前目录(宿主机当前目录)的所有文件复制到该目录下。
通过apt-get命令安装Redis
设置容器的启动命令为redis-server /etc/redis/redis.conf,即启动Redis服务器并加载配置文件。
有了这个Dockerfile后,我们可以使用docker build命令来构建镜像:
docker build -t my-redis .
该命令将会在当前目录下构建一个名为my-redis的Redis镜像,其中“.`”表示当前目录。在构建过程中,Docker将会执行Dockerfile中的每一条指令,并输出相应的信息。最终将会生成一个名为my-redis的镜像,可以使用docker images命令来查看所有已安装的镜像。
更新镜像之前,我们需要使用镜像来创建一个容器。
edualiyun@edualiyun:~$ docker run -t -i ubuntu:15.10 /bin/bash
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit命令来退出这个容器。
此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器镜像。
edualiyun@edualiyun:~$ docker commit -m="has update" -a="edualiyun" e218edb10161 edualiyun/ubuntu:v2 sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
各个参数说明:
-m:提交的描述信息
-a:指定镜像作者
e218edb10161:容器
edualiday/ubuntu:v2:指定要创建的目标镜像名
docker pull jenkins
docker run --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home --restart always -d jenkins/jenkins
它创建并启动了一个名为'jenkins'的Docker容器。参数的解释:
Docker 安装 Nginx-CSDN博客