文章目录
- 1、Docker简介/安装
- 1.1、Docker简介
- 1.2、ubuntu18.04上安装Docker
- 1.3、卸载Docker
- 2、Docker常用命令
- 2.1、列举常用命令使用参数
- 3、制作自己的镜像
- 3、目录挂载
- 4、Docker-Compose
1、Docker简介/安装
1.1、Docker简介
Docker 是一个应用打包、分发、部署的工具
你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,
普通的虚拟机则是一个完整而庞大的系统,包含了所有文件系统和软件。
Docker 的主要优势包括:
一致性和可移植性:应用程序可在任何支持 Docker 的环境中运行。
轻量和高性能:容器化应用程序更加轻量,资源利用率高。
快速部署和扩展:通过编排工具可实现自动化部署和弹性扩展。
安全隔离:容器化应用程序彼此之间以及与宿主机之间实现了良好的隔离。
镜像:可以理解为软件安装包,可以方便的进行传播和安装。
容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。
1.2、ubuntu18.04上安装Docker
1、通过官方仓库安装
sudo apt-get updatesudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg \lsb-release
2、添加软件源的GPG密钥(本人选择的中科大选择其中一个即可)
中科大:
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软件源(本人选择的中科大)
中科大源:
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、再次更新索引包
sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io
5、验证是否成功
# 用hello world镜像验证安装是否成功
sudo docker run hello-world# 设置开机自启动docker
sudo systemctl enable docker
6、执行5拉取镜像时可能会出现以下错误
error pulling image configuration: download failed after
解决方法:
打开 Docker 的配置文件 daemon.json
vim /etc/docker/daemon.json
添加国内镜像源
{"registry-mirrors": ["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}
保存配置文件并重启服务
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
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常用命令
--列举出所有容器
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中运行容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...][OPTIONS]:可选参数,用于配置容器的各种选项,如端口映射、容器名称等。IMAGE:要运行的镜像名称或ID。[COMMAND] [ARG...]:可选的命令和参数,用于在容器内执行特定的命令。
2、构建自己的Docker镜像
docker build [OPTIONS] PATH | URL | -[OPTIONS]:可选参数,用于配置构建过程,如镜像标签、构建上下文路径等。PATH | URL | -:Dockerfile所在的路径、URL或者使用标准输入作为Dockerfile。
3、从Docker仓库中拉取现有的镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST][OPTIONS]:可选参数,用于配置拉取过程,如认证信息等。NAME[:TAG|@DIGEST]:要拉取的镜像名称、标签或摘要。
4、将本地的镜像推送到Docker仓库
docker push [OPTIONS] NAME[:TAG][OPTIONS]:可选参数,用于配置推送过程,如认证信息等。NAME[:TAG]:要推送的镜像名称和标签。
5、启动已停止的容器
docker start [OPTIONS] CONTAINER [CONTAINER...][OPTIONS]:可选参数,用于配置启动过程,如守护模式等。CONTAINER [CONTAINER...]:要启动的容器名称或ID。
6、重启正在运行的容器
docker restart [OPTIONS] CONTAINER [CONTAINER...][OPTIONS]:可选参数,用于配置重启过程,如超时时间等。CONTAINER [CONTAINER...]:要重启的容器名称或ID。
7、在运行中的容器内执行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...][OPTIONS]:可选参数,用于配置执行过程,如进入交互模式等。CONTAINER:要执行命令的容器名称或ID。COMMAND [ARG...]:要在容器内执行的命令及其参数。
3、制作自己的镜像
Dockerfile是用于定义Docker镜像构建过程的文本文件。它包含一系列的指令和配置,用于指导Docker引擎在构建过程中执行特定的操作。以下是一些与Dockerfile相关的常用命令:
FROM:指定基础镜像。RUN:在容器内执行命令。COPY:将文件或目录从主机复制到容器内。ADD:将文件或目录从主机复制到容器内,并支持URL和解压缩操作。WORKDIR:设置工作目录。EXPOSE:声明容器运行时监听的端口。CMD:指定容器启动时要执行的命令。
1、编写 Dockerfile
# 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、编译
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/
bind mount 方式用绝对路径 -v D:/code:/appvolume 方式,只需要一个名字 -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相关的常用命令:
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/
version: "3.7"services:app:build: ./ports:- 80:8080volumes:- ./:/appenvironment:- TZ=Asia/Shanghairedis:image: redis:5.0.13volumes:- redis:/dataenvironment:- TZ=Asia/Shanghaivolumes:redis:
在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]