Docker入门到精通教程

 Docker是什么

Docker是一个开源的应用容器引擎,它基于Go语言并遵从Apache2.0协议开源。容器技术是和我们的宿主机共享硬件资源及操作系统,实现资源的动态分配,在资源受到隔离的进程中运行应用程序及其依赖关系。

Docker可帮助更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。它的优点包括简化流程、避免选择恐惧症、节省开支等。

使用Docker可以将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。Docker目前是最流行的Linux容器解决方案。它的基本概念包括镜像(Image)、容器(Container)和仓库(Repository)。镜像是Docker运行容器的前提,仓库是存放镜像的场所。

Docker架构使用C/S结构,即客户端/服务器体系结构。其中,Docker daemon是一个运行在宿主机(DOCKER-HOST)的后台进程。

Docker的应用场景

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

Docker仓库

Docker仓库是用于存储Docker镜像并可以通过Docker pull命令下载的云环境。Docker仓库分为公有仓库和私有仓库,公有仓库包括Docker Hub等开放给用户使用并允许用户管理镜像的仓库,私有仓库则是由用户自行搭建的存放镜像的云环境。在Docker中使用仓库之前需要登录Docker Hub或其他仓库,登录后可以通过Docker search命令查找需要下载的镜像。

Docker镜像

Docker使用

1、查找镜像

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入门到精通教程_第1张图片

2、列出本地镜像

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

3、启动容器

 docker run [OPTIONS] IMAGE [COMMAND] 
[OPTIONS]常用参数有:
-i:启动一个可交互的容器,并持续打开标准输入。
-t:使用终端关联到容器的标准输入输出上。
-d:将容器放置后台运行

docker run有非常多参数,可以使用--help查看

Docker入门到精通教程_第2张图片

如docker run hello-world,如果本地没有该镜像,会从仓库查找并拉取

 Docker入门到精通教程_第3张图片

运行交互式的容器


我们通过 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。
 

4、查看容器

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            展示所有文件大小

 

5、查看容器日志 

使用 docker logs 命令,查看容器内的标准输出,常用来排查程序运行出错原因。

runoob@runoob:~$ docker logs 2b1b7a428627

Docker入门到精通教程_第4张图片 6、停止容器

使用 docker stop 容器id 命令来停止容器:

会输出容器ID

7、重启容器

使用 docker start +容器ID 启动一个已停止的容器:

$ docker start b750bbbcfd88

8、进入容器

进入Docker容器的命令为:


docker exec -it <容器ID或名称> /bin/bash


或者使用简写形式:


docker exec -it <容器ID或名称> sh


docker exec -it 7752222e1e1 /bin/bash

Docker入门到精通教程_第5张图片
该命令会在指定的容器中启动一个交互式终端,允许您在容器内执行命令。容器的ID或名称可以是任何正在运行的容器的标识符。进入容器后,您可以在容器内执行任意命令。

输入exit或者按ctrl+D退出容器

9、删除容器

删除容器使用 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使用实例

安装jenkins

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 run': Docker的一个命令,用于从Docker镜像创建容器并启动它。
  • '--name jenkins': 给创建的容器命名为'jenkins'。
  • '-p 8080:8080': 端口映射[宿主机端口:容器端口],将容器内部的8080端口映射到宿主机器的8080端口。
  • '-p 50000:50000': 另一组端口映射,将容器内部的50000端口映射到宿主机器的50000端口。
  • '-v jenkins_home:/var/jenkins_home': 数据卷映射,将宿主机上的'jenkins_home'目录映射到容器内的'/var/jenkins_home'目录。
  • '--restart always': 设置容器的重启策略为'always',即无论容器是启动还是停止,都会在退出后自动重启。
  • '-d jenkins/jenkins': -d容器放置后台运行,使用'jenkins/jenkins'这个Docker镜像来创建并启动容器。

安装nginx

Docker 安装 Nginx-CSDN博客

你可能感兴趣的:(运维,docker,开源)