文章目录
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
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]