深入了解Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用及依赖包到一个可移植的容器中,然后发布到任何 Linux 或 Windows 机器上,也可以实现虚拟化,方便云端部署和升级。
Docker 镜像
Docker 镜像就是一个只读的模板,可以用来创建 Docker 容器。一个镜像可以包含一个或多个文件系统,也可以包含几个用来运行应用程序的工具。可以通过 docker pull
命令来下载一个镜像。例如,下载官方的 ubuntu 镜像:
docker pull ubuntu
也可以指定镜像的版本,在镜像名后面加上冒号和版本号。例如,下载 Ubuntu 16.04 的镜像:
docker pull ubuntu:16.04
Docker 容器
Docker 容器是 Docker 镜像的可运行实例。可以使用 docker run
命令来创建一个容器。例如,启动一个 Ubuntu 容器:
docker run -it --rm ubuntu bash
命令说明:
-it
表示要以交互模式运行容器,并打开标准输入输出。--rm
表示容器停止后会自动删除。ubuntu
是要运行的镜像名称。bash
是容器启动后要执行的命令。
在容器内部,可以做任何常规操作,就像在 Ubuntu 系统上一样:
ls /
命令将列出容器内的根目录下的文件。
Docker 仓库
Docker 仓库是用来存放和分享 Docker 镜像的地方。Docker 官方维护了一个公共的 Docker 仓库,名为 Docker Hub。开发者也可以在自己的服务器上搭建私有 Docker 仓库。
可以使用 docker push
命令将本地的镜像推送到 Docker 仓库。例如,先打一个自己的镜像:
docker build -t myimage ./
命令说明:
-t
表示为镜像指定一个标签,在将来容器的创建、启动或运行时使用该标签来指定这个镜像。myimage
是镜像名称。./
是 Dockerfile 文件所在的路径。
查看自己修改过的镜像:
docker images
命令将会列出所有在本地构建或下载的镜像。
在推送镜像之前,需要先使用 docker login
命令登录到 Docker 镜像仓库:
docker login
命令将会提示输入 Docker 帐户的用户名和密码。成功登录后,可以使用 docker push
命令将本地镜像推送到 Docker 仓库:
docker push myimage
命令中的 myimage
是要推送的镜像名称。
示例说明
示例一:使用 Docker 镜像搭建 WordPress
可以使用 Docker Compose 来搭建 WordPress。首先,在本地创建一个 docker-compose.yml
文件:
version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_mysql_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: your_wordpress_password
wordpress:
depends_on:
- db
image: wordpress:5.1.1-php7.2-apache
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: your_wordpress_password
volumes:
- wordpress_files:/var/www/html
volumes:
db_data:
wordpress_files:
其中:
db
服务使用了 MySQL 官方的 5.7 版本镜像,创建了一个名为db_data
的数据卷来存储数据库文件。wordpress
服务使用了 WordPress 官方的 5.1.1 版本镜像,将8000
端口映射到容器的80
端口,以便可以通过浏览器访问 WordPress 程序。同时,将wordpress_files
映射到容器的/var/www/html
目录,以便能在本地修改 WordPress 的配置和插件。
在终端中使用 docker-compose up
命令启动 WordPress:
docker-compose up -d
然后,可以在本地的浏览器上访问:http://localhost:8000
,来访问您的 WordPress。
示例二:搭建基于 Jenkins 的 CI/CD 环境
这个示例演示了如何使用 Jenkins 和 Docker,来搭建一个自动化的 CI/CD 环境。
首先,需要建立一个 Dockerfile,创建镜像,同时以来 git。
FROM jenkins/jenkins:lts
LABEL maintainer="your_email_address"
USER root
RUN apt-get update && \
apt-get install -y apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - && \
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" && \
apt-get update && \
apt-get install -y docker-ce && \
rm -rf /var/lib/apt/lists/*
USER jenkins
该 Dockerfile 安装并配置了 Jenkins,同时安装了 Docker CE。
构建该镜像的命令:
docker build -t my_jenkins .
然后运行镜像:
docker run -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock my_jenkins
命令中:
-p
表示将主机端口映射到容器内的端口。-v
表示将主机的目录挂载到容器内。
最后,在浏览器中输入http://localhost:8080/
,登陆 Jenkins, 按提示安装需要的插件。
现在,可以创建一个 Jenkins 作业,将代码检出到构建环境中,在容器中执行构建或部署命令。
总结
本文为了深入了解 Docker,介绍了 Docker 镜像、容器和仓库的概念,并提供了两个具体的示例:使用 Docker Compose 搭建 WordPress 环境,使用 Docker CE 安装 Jenkins 服务。通过实践,可以更好地理解 Docker 的概念和应用场景。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入了解docker(docker镜像、容器、仓库的基本概念) - Python技术站