Docker快速入门

文章目录

1、Docker简介/安装

1.1、Docker简介

Docker 是一个应用打包、分发、部署的工具

你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,

普通的虚拟机则是一个完整而庞大的系统,包含了所有文件系统和软件。

Docker 的主要优势包括:

一致性和可移植性:应用程序可在任何支持 Docker 的环境中运行。

轻量和高性能:容器化应用程序更加轻量,资源利用率高。

快速部署和扩展:通过编排工具可实现自动化部署和弹性扩展。

安全隔离:容器化应用程序彼此之间以及与宿主机之间实现了良好的隔离。

镜像:可以理解为软件安装包,可以方便的进行传播和安装。

容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。

1.2、ubuntu18.04上安装Docker

1、通过官方仓库安装

bash 复制代码
 sudo apt-get update

 sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

2、添加软件源的GPG密钥(本人选择的中科大选择其中一个即可)

bash 复制代码
中科大:
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

阿里云:
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

官方源:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

3、向 source.list 中添加Docker软件源(本人选择的中科大)

bash 复制代码
中科大源:
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

阿里源:
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

官方源:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

4、再次更新索引包

bash 复制代码
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

5、验证是否成功

bash 复制代码
# 用hello world镜像验证安装是否成功
sudo docker run hello-world

# 设置开机自启动docker
sudo systemctl enable docker

6、执行5拉取镜像时可能会出现以下错误

error pulling image configuration: download failed after

解决方法:

打开 Docker 的配置文件 daemon.json

bash 复制代码
vim /etc/docker/daemon.json

添加国内镜像源

bash 复制代码
{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

保存配置文件并重启服务

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

桌面版:https://www.docker.com/products/docker-desktop

服务器版:https://docs.docker.com/engine/install/#server

镜像仓库:https://hub.docker.com/

1.3、卸载Docker

bash 复制代码
sudo apt-get purge docker-ce docker-ce-cli containerd.io

# 如果要抹去镜像和容器
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

# 如果需要删除所有镜像,容器和卷(第一次安装请忽略):
sudo rm -rf /var/lib/docker

# 备注:apt-get remove会保留软件的配置文件如果想删除请执行以下操作
# 查看相关软件包是否有残余:
dpkg -l | grep docker

# 使用purage清除配置文件:
sudo apt-get purge docker-ce

2、Docker常用命令

bash 复制代码
--列举出所有容器
docker ps

--列举出所有docker名字
docker images

--查看所有容器(包含已经停止的)
docker ps -a

--停止容器
docker stop (容器名字|容器id前三位)

--停止所有
docker stop 'docker ps -aq'

--删除容器
docker rm (容器id前三位)

--再次进入容器
docker exec -ti (容器id) bash

--拉取镜像
docker pull 镜像名称

--搜索镜像
docker search 镜像名称

2.1、列举常用命令使用参数

1、在Docker中运行容器

bash 复制代码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

[OPTIONS]:可选参数,用于配置容器的各种选项,如端口映射、容器名称等。

IMAGE:要运行的镜像名称或ID。

[COMMAND] [ARG...]:可选的命令和参数,用于在容器内执行特定的命令。

2、构建自己的Docker镜像

bash 复制代码
docker build [OPTIONS] PATH | URL | -

[OPTIONS]:可选参数,用于配置构建过程,如镜像标签、构建上下文路径等。

PATH | URL | -:Dockerfile所在的路径、URL或者使用标准输入作为Dockerfile。

3、从Docker仓库中拉取现有的镜像

bash 复制代码
docker pull [OPTIONS] NAME[:TAG|@DIGEST]

[OPTIONS]:可选参数,用于配置拉取过程,如认证信息等。

NAME[:TAG|@DIGEST]:要拉取的镜像名称、标签或摘要。

4、将本地的镜像推送到Docker仓库

bash 复制代码
docker push [OPTIONS] NAME[:TAG]

[OPTIONS]:可选参数,用于配置推送过程,如认证信息等。

NAME[:TAG]:要推送的镜像名称和标签。

5、启动已停止的容器

bash 复制代码
docker start [OPTIONS] CONTAINER [CONTAINER...]

[OPTIONS]:可选参数,用于配置启动过程,如守护模式等。

CONTAINER [CONTAINER...]:要启动的容器名称或ID。

6、重启正在运行的容器

bash 复制代码
docker restart [OPTIONS] CONTAINER [CONTAINER...]

[OPTIONS]:可选参数,用于配置重启过程,如超时时间等。

CONTAINER [CONTAINER...]:要重启的容器名称或ID。

7、在运行中的容器内执行命令

bash 复制代码
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

[OPTIONS]:可选参数,用于配置执行过程,如进入交互模式等。

CONTAINER:要执行命令的容器名称或ID。

COMMAND [ARG...]:要在容器内执行的命令及其参数。

3、制作自己的镜像

Dockerfile是用于定义Docker镜像构建过程的文本文件。它包含一系列的指令和配置,用于指导Docker引擎在构建过程中执行特定的操作。以下是一些与Dockerfile相关的常用命令:

bash 复制代码
FROM:指定基础镜像。

RUN:在容器内执行命令。

COPY:将文件或目录从主机复制到容器内。

ADD:将文件或目录从主机复制到容器内,并支持URL和解压缩操作。

WORKDIR:设置工作目录。

EXPOSE:声明容器运行时监听的端口。

CMD:指定容器启动时要执行的命令。

1、编写 Dockerfile

bash 复制代码
# FROM <image>:<tag> 指定基础镜像,必须是第一个指令
FROM node:11

# 镜像维护者的信息
MAINTAINER zhu

# 复制代码
ADD . /app

# 设置容器启动后的默认运行目录
WORKDIR /app

# 运行命令,安装依赖
# RUN 命令可以有多个,但是可以用 && 连接多个命令来减少层级。
# 例如 RUN npm install && cd /app && mkdir logs
RUN npm install --registry=https://registry.npm.taobao.org

# CMD 指令只能一个,是容器启动后执行的命令,算是程序的入口。
# 如果还需要运行其他命令可以用 && 连接,也可以写成一个shell脚本去执行。
# 例如 CMD cd /app && ./start.sh
CMD node app.js

2、编译

bash 复制代码
docker build -t test:v1 .

# -t 设置镜像名字和版本号

# 运行 docker run -p 9000:8080 --name test-hello test:v1
-p 将8080映射容器内端口到宿主机9000
--name 容器名字
-d 后台运行

3、目录挂载

使用 Docker 运行后,我们改了项目代码不会立刻生效,需要重新build和run,很是麻烦。

容器里面产生的数据,例如 log 文件,数据库备份文件,容器删除后就丢失了。

bind mount 直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上

文档参考:https://docs.docker.com/storage/

bash 复制代码
bind mount 方式用绝对路径 -v D:/code:/app

volume 方式,只需要一个名字 -v db-data:/app

示例:
docker run -p 8080:8080 --name test-hello -v D:/code:/app -d test:v1

4、Docker-Compose

Docker-compose是一个用于定义和运行多个容器应用程序的工具。它使用YAML文件来配置应用程序的服务、网络和卷等。以下是一些与Docker-compose相关的常用命令:

bash 复制代码
docker-compose up:构建并启动Docker-compose定义的所有服务。

docker-compose down:停止并删除Docker-compose定义的所有服务。

docker-compose build:构建Docker-compose定义的所有服务的镜像。

docker-compose logs:查看Docker-compose定义的所有服务的日志。

要把项目依赖的多个服务集合到一起,我们需要编写一个docker-compose.yml文件,描述依赖哪些服务

参考文档:https://docs.docker.com/compose/

bash 复制代码
version: "3.7"

services:
  app:
    build: ./
    ports:
      - 80:8080
    volumes:
      - ./:/app
    environment:
      - TZ=Asia/Shanghai
  redis:
    image: redis:5.0.13
    volumes:
      - redis:/data
    environment:
      - TZ=Asia/Shanghai

volumes:
  redis:
bash 复制代码
在docker-compose.yml 文件所在目录,执行:docker-compose up就可以跑起来了。
命令参考:https://docs.docker.com/compose/reference/up/

在后台运行只需要加一个 -d 参数docker-compose up -d
查看运行状态:docker-compose ps
停止运行:docker-compose stop
重启:docker-compose restart
重启单个服务:docker-compose restart service-name
进入容器命令行:docker-compose exec service-name sh
查看容器运行log:docker-compose logs [service-name]
相关推荐
运维&陈同学39 分钟前
【Beats01】企业级日志分析系统ELK之Metricbeat与Heartbeat 监控
运维·elk·elasticsearch·云原生·kibana·heartbeat·metricbeat
地球资源数据云41 分钟前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法
是店小二呀1 小时前
【Linux】Linux开发利器:make与Makefile自动化构建详解
linux·运维·自动化
baihb10242 小时前
Jenkins 构建流水线
运维·jenkins
BUG 4042 小时前
LINUX--shell
linux·运维·服务器
菜鸟小白:长岛icetea2 小时前
Linux零基础速成篇一(理论+实操)
linux·运维·服务器
Java小白中的菜鸟4 小时前
centos7的磁盘扩容
linux·运维·服务器
黑客老陈5 小时前
面试经验分享 | 北京渗透测试岗位
运维·服务器·经验分享·安全·web安全·面试·职场和发展
橘子师兄5 小时前
如何在自己的云服务器上部署mysql
运维·服务器·mysql
@泽栖5 小时前
Docker 常用命令
运维·服务器·docker