本文提供了全面的Docker学习指南,涵盖了从安装到基本命令使用的所有内容。详细介绍了Docker的优点、安装步骤、基本概念以及常用命令。通过实践案例,读者可以学习到如何构建自己的Docker镜像和部署多容器应用。Docker学习将帮助你更好地管理和运行应用程序。
Docker学习:从入门到实践的全面指南 Docker简介与安装什么是Docker
Docker是一种开源的应用容器引擎,它可以让开发人员将应用程序及其依赖项打包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器或Windows机器,以及任何公有或私有云上。Docker是基于开源项目libcontainer制作的,它遵循了Unix容器格式和运行时。
Docker的优点
- 快速启动:Docker容器可以在秒级启动。
- 轻量级:Docker容器的启动速度和资源占用比传统虚拟机更快、更轻量。
- 一致的环境:Docker保证了开发、测试和生产环境的一致性。
- 易于分发:Docker容器可以很容易地打包、分发和安装。
- 高效利用资源:Docker容器可以在同一台机器上运行多个应用程序,每个容器都有自己的环境,但共享主机的操作系统。
Docker的安装步骤
在Ubuntu上安装Docker
- 更新现有的包索引:
sudo apt-get update
- 安装一些依赖包,以便apt能通过HTTPS来使用仓库:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
- 添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 使用下面的命令来设置稳定的仓库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 再次更新包索引:
sudo apt-get update
- 安装Docker CE:
sudo apt-get install docker-ce
- 验证Docker安装是否正确:
sudo docker run hello-world
在Windows或macOS上安装Docker
- 访问Docker官方下载页面下载适用于Windows或macOS的Docker Desktop。
- 按照安装向导进行安装。
- 打开Docker Desktop,点击“Start”启动Docker。
- 验证Docker安装是否正确:
docker run hello-world
镜像(Images)
Docker镜像是一个只读的模板,它定义了一个Docker容器的环境。一个容器镜像包含了运行应用程序所需的所有文件、库和依赖项。
获取镜像
可以从Docker Hub公共仓库或私有仓库中获取镜像。例如,获取Ubuntu 18.04镜像:
docker pull ubuntu:18.04
构建镜像
可以使用Dockerfile
来构建镜像。例如,创建一个简单的Dockerfile
:
# 使用Ubuntu 18.04作为基础镜像
FROM ubuntu:18.04
# 更新包列表并安装vim
RUN apt-get update && apt-get install -y vim
# 设置容器启动时执行的命令
CMD ["vim"]
构建镜像:
docker build -t my-vim-image .
容器(Containers)
容器是镜像的运行实例。容器是轻量级的、独立的、可移植的执行环境,它们从镜像中创建。
运行容器
运行一个容器:
docker run -it --name my-container ubuntu:18.04
启动和停止容器
启动容器:
docker start my-container
停止容器:
docker stop my-container
仓库(Repositories)
仓库是一个存储和共享镜像的地方。Docker Hub是一个公共的仓库,可以用来存储和分享镜像。
登录Docker Hub
docker login
打标签并推送镜像
打标签:
docker tag my-vim-image username/my-vim-image:latest
上传到Docker Hub:
docker push username/my-vim-image:latest
Docker基本命令
使用Docker命令行操作镜像和容器
列出所有镜像
docker images
列出所有容器
docker ps -a
删除镜像
docker rmi image_id
删除容器
docker rm container_id
进入容器
docker exec -it container_id /bin/bash
复制文件
从主机复制文件到容器:
docker cp /path/to/local/file container_id:/path/to/container
从容器复制文件到主机:
docker cp container_id:/path/to/container /path/to/local
常用命令详解
docker run
命令详解
docker run
命令用于创建并启动一个新的容器。其基本语法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
--name
:指定容器名称。-d
:后台运行容器。-p
:端口映射。-v
:挂载数据卷。--env
:设置环境变量。
示例:
docker run -d --name my-web-server -p 8080:80 nginx
docker ps
命令详解
docker ps
命令用于列出运行中的容器。其基本语法如下:
docker ps [OPTIONS]
-a
:列出所有容器,包括停止的容器。-q
:只显示容器的ID。--filter
:过滤容器。
示例:
docker ps -a
Dockerfile入门
Dockerfile的作用
Dockerfile是一个文本文件,包含了一条条的指令,每一行的命令都用来构建镜像。Dockerfile通常由以下几个部分组成:
- 基础镜像:使用
FROM
指令指定基础镜像。 - 维护信息:使用
MAINTAINER
指令指定镜像的维护者信息。 - 环境设置:使用
ENV
指令设置环境变量。 - 运行命令:使用
RUN
指令运行命令。 - 工作目录:使用
WORKDIR
指令设置工作目录。 - 容器启动命令:使用
CMD
或ENTRYPOINT
指定容器启动时运行的命令。 - 文件拷贝:使用
COPY
或ADD
指令将文件从本地拷贝到镜像中。 - 容器暴露端口:使用
EXPOSE
指令指定容器使用的端口。
编写简单的Dockerfile
假设要创建一个包含Python和Flask的Docker镜像:
# 使用官方Python镜像作为基础镜像
FROM python:3.7-alpine
# 设置工作目录
WORKDIR /app
# 复制应用程序代码到镜像
COPY . /app
# 安装应用依赖
RUN pip install -r requirements.txt
# 暴露应用端口
EXPOSE 5000
# 设置环境变量
ENV NAME World
# 设置容器启动命令
CMD ["python", "app.py"]
构建镜像:
docker build -t my-flask-app .
运行容器:
docker run -p 5000:5000 -e NAME="World" my-flask-app
Docker网络与数据卷
Docker网络模式
Docker支持多种网络模式,包括bridge
、host
、container
和none
。
Bridge模式
默认模式,将容器连接到一个虚拟网桥,容器可以与其他容器或主机通信。
docker run -d --name my-nginx -p 8080:80 nginx
Host模式
容器使用主机的网络堆栈,而不是使用Docker的虚拟网桥。
docker run -d --network host --name my-nginx nginx
Container模式
容器可以连接到另一个容器的网络堆栈上。
docker run -d --name my-nginx --network container:my-nginx nginx
None模式
不配置网络,容器无法通过网络进行通信。
docker run -d --network none --name my-nginx nginx
数据卷的使用
数据卷是Docker中一个持久化存储的机制,它允许数据在容器间共享和重用。
创建数据卷
docker volume create my-volume
挂载数据卷
docker run -d --name my-nginx -v my-volume:/data nginx
检查数据卷
docker volume ls
删除数据卷
docker volume rm my-volume
Docker实践案例
构建自己的Docker镜像
假设要创建一个包含MySQL和WordPress的Docker镜像。
创建Dockerfile
# 使用WordPress官方镜像作为基础镜像
FROM wordpress:latest
# 设置环境变量
ENV WORDPRESS_DB_HOST db:3306
ENV WORDPRESS_DB_NAME wordpress
ENV WORDPRESS_DB_USER root
ENV WORDPRESS_DB_PASSWORD password
# 设置WordPress数据目录
VOLUME /var/www/html
# 设置WordPress配置文件
COPY wp-config.php /var/www/html/wp-config.php
# 暴露WordPress端口
EXPOSE 80
创建wp-config.php
文件:
<?php
define('DB_NAME', 'wordpress');
define('DB_USER', 'root');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'db');
?>
构建并运行MySQL容器
docker run -d --name db -e MYSQL_ROOT_PASSWORD=password mysql
构建并运行WordPress容器
docker build -t my-wordpress-app .
docker run -d --name wordpress -p 8080:80 --link db:mysql my-wordpress-app
多容器应用部署
使用docker-compose
来部署一个包含WordPress和MySQL的多容器应用。
创建docker-compose.yml
文件
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
MYSQL_USER: root
MYSQL_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpress
depends_on:
- db
volumes:
db_data:
启动应用
docker-compose up -d
查看容器
docker-compose ps
停止并清理应用
docker-compose down
通过以上步骤,你可以学到如何使用Docker构建和部署多容器应用,从而更好地管理和运行你的应用程序。
共同学习,写下你的评论
评论加载中...
作者其他优质文章