快速入门
视频参考:BV11L411g7U1,资料:https://docker.easydoc.net:主windows平台
虚拟机环境基础镜像:ubuntu-22.04.3-desktop-amd64.iso
安装os时配置:中文简体,NAT网络登录,4G内存,100G磁盘,仅作为参考
基础配置如下:
# 1. 设置超级用户密码,之后始终以超级用户登录
sudo passwd root #设置密码
su #登录
# 2. 设置网络确保可以ping通百度
## 此处可通过右上角手动设置:注意此处的ip范围和网关
## 虚拟机中注意网关设置,安装个人习惯一般最后一个数字是2
## 如:192.168.146.100 255.255.255.0 192.168.146.2
## dns设置:8.8.8.8,114.114.114.114
ping baidu.com #此处要ping通
# 3. 安装ssh以配置远程连接,此步前确保能连接网络ping www.baidu.com成功
apt install openssh-server #(外网条件下,openssh-ftp-server依赖也会相应安装)
# 4、修改ssh配置
gedit /etc/ssh/sshd_config
# 修改相应选项:①PermitRootLogin yes #prohibit-password,②PasswordAuthentication yes
# 5、重启ssh,重启网络,连接远程
Docker简介和安装
Docker是什么
应用打包,分发,部署工具
理解:轻量级的虚拟机,只虚拟软件的运行环境,其余不需要
如何打包???依赖,第三方仓库,软件--->安装包
如何分发???安装包-->镜像仓库:供他人取用
如何部署???运行应用--模拟运行环境,自动化:一个命令就可以自动部署好所需环境,如何实现这一个命令???
支持系统Windows/Mac/Linux
镜像:软件安装包???
容器:软件安装之后的状态???
安装
Install Docker Desktop:桌面版-带图形界面的安装包:https://www.docker.com/products/docker-desktop/
Install Docker Engine:服务器版-命令安装:https://docs.docker.com/engine/install/#server
windows-Desktop
安装步骤
1、下载windows下Desktop版安装包
https://www.docker.com/products/docker-desktop/
包名:Docker Desktop Installer.exe
2、双击安装
3、点击程序
选择Accept
4、注册登录
此处选择使用github账户登录
5、镜像加速源--重要
服务在国外,需要此
页面位置:设置--Docker Engine--"registry-mirrors": ["https://registry.docker-cn.com"],
往方括号中添加源信息,可添加多个
镜像加速器 | 镜像加速器地址 |
---|---|
Docker 中国官方镜像 | https://registry.docker-cn.com |
DaoCloud 镜像站 | http://f1361db2.m.daocloud.io |
Azure 中国镜像 | https://dockerhub.azk8s.cn |
科大镜像站 | https://docker.mirrors.ustc.edu.cn |
阿里云 | https://ud6340vz.mirror.aliyuncs.com |
七牛云 | https://reg-mirror.qiniu.com |
网易云 | https://hub-mirror.c.163.com |
腾讯云 | https://mirror.ccs.tencentyun.com |
linux-非Desktop版
此处使用上面的ubuntu平台,使用命令版docker
参考:https://docs.docker.com/engine/install/#server
支持平台
Platform | x86_64 / amd64 | arm64 / aarch64 | arm (32-bit) | ppc64le | s390x |
---|---|---|---|---|---|
CentOS | ✅ | ✅ | ✅ | ||
Debian | ✅ | ✅ | ✅ | ✅ | |
Fedora | ✅ | ✅ | ✅ | ||
Raspberry Pi OS (32-bit) | ✅ | ||||
RHEL (s390x) | ✅ | ||||
SLES | ✅ | ||||
Ubuntu | ✅ | ✅ | ✅ | ✅ | ✅ |
Binaries | ✅ | ✅ | ✅ |
ubuntu安装步骤
参考官方文档:https://docs.docker.com/engine/install/ubuntu/)
1、先决条件
①注意:如果您使用ufw或firewalld来管理防火墙设置,请注意,当您使用Docker公开容器端口时,这些端口会绕过防火墙规则
②OS必须项--64-bit的ubuntu
- Ubuntu Mantic 23.10
- Ubuntu Lunar 23.04
- Ubuntu Jammy 22.04 (LTS)
- Ubuntu Focal 20.04 (LTS)
兼容架构:x86_64 (or amd64), armhf, arm64, s390x, and ppc64le (ppc64el)
2、卸载老版本
①系统上可能存在非官方版本的docker会导致冲突
包括
docker.io
docker-compose
docker-compose-v2
docker-doc
podman-docker
同时docker依赖的containerd和runc也要卸载
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
②移除落地文件、配置
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
3、安装--重要
安装方式
① Docker Desktop for Linux中绑定下载
②apt源下载
③手动安装
④便利脚本-仅推荐用于测试和开发环境。
②apt源下载
1° 设置Docker's apt repository
让apt源中能有包
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
2° 安装最新版
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
还可选特定版
3° 确认是否安装成功
需要手动启动docker
systemctl restart docker
下载一个镜像,并在容器中运行,测试是否安装成功
# hello-world image
sudo docker run hello-world
显示结果
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:4bd78111b6914a99dbc560e6a20eab57ff6655aea4a80c50b0c5491968cbc2e6
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
4、卸载
①卸载包
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
②删除文件/配置
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Docker快速安装软件-使用已有镜像
Docker官方镜像库:https://hub.docker.com/
Docker命令:https://docs.docker.com/engine/reference/commandline/container_run/
windows-Desktop
安装redis
1、登录https://hub.docker.com/,查找redis镜像,有使用方法,可获取2中的命令
2、windows命令行执行命令
docker run -d -p 6379:6379 --name redis redis:latest
解释:docker运行一个容器命令,-d:在后台运行,-p:端口映射,--name:命名容器
执行结果:
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
2f44b7a888fa: Pull complete
c55535369ffc: Pull complete
3622841bf0aa: Pull complete
91a62ca7377a: Pull complete
fdd219d1f4ab: Pull complete
fdf07fe2fb4c: Pull complete
4f4fb700ef54: Pull complete
fba604e70bfe: Pull complete
Digest: sha256:b5ddcd52d425a8e354696c022f392fe45fca928f68d6289e6bb4a709c3a74668
Status: Downloaded newer image for redis:latest
2dadc0f482dc23ce86d768f29da71414620e68a18f4a3f94362583d516f02f3b
3、登录docker Destop查看运行情况
路径:
①Images--Local--有镜像
②Containers查看redis运行状态,点击可查看运行日志Logs等
点击Exec,可使用redis-命令
# ls
# redis-cli
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379>
安装wordpress
依赖一定的数据库,此处使用配置:docker-compose.yml
1、windows本地新建文件docker-compose.yml,内容如下
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
2、命令行切换到存放上面文件的目录中,执行命令
docker-compose up -d
3、docker Desktop中查看
Images中拉下来mysql和wordpress镜像
Containers中Desktop容器中运行两个:mysql和wordpress
制作自己的镜像
1、准备示例项目
此处使用参考的项目
示例项目代码:https://github.com/gzyunke/test-docker
这是一个 Nodejs + Koa2 写的 Web 项目,提供了简单的两个演示页面。
软件依赖:nodejs
项目依赖库:koa、log4js、koa-router
手动到github上进行拉取,此包中包含dockerfile
2、编写dockerfile
FROM node:11
MAINTAINER easydoc.net
# 复制代码
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
3、Build 为镜像(安装包)
dockerfile所在目录运行此命令
docker build -t test:v1 .
docker build:生成镜像,-t: 设置镜像名字和版本号
查看docker Desktop有test镜像
4、运行
docker run -p 8080:8080 --name test-hello test:v1
此处本机8080端口已经被占用,删除运行的test容器,使用8088替代前一个8080重新执行此容器
访问网页http://localhost:8088,显示index page
5、更多相关命令
docker ps 查看当前运行中的容器
docker images 查看镜像列表
docker rm container-id 删除指定 id 的容器
docker stop/start container-id 停止/启动指定 id 的容器
docker rmi image-id 删除指定 id 的镜像
docker volume ls 查看 volume 列表
docker network ls 查看网络列表
目录挂载-重要
需求
1、使用docker运行后,改的项目代码不会立刻生效,需要重新build和run
2、容器产生的数据,容器被删除后就消失了
几种挂载方式
①bind mount:直接把宿主机目录映射到容器内,适合挂目录代码和配置文件,可挂到多个容器上
②volume:由容器创建和管理,创建在宿主机,所以删除容器不i会丢失,官方推荐,更高效,linux文件系统适合存储数据库数组,可挂到多个容器上
③tmpfs mount:适合存储临时文件,存宿主机内容中,不可多容器共享
使用
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
效果,修改本机代码,容器中文件也已修改
多容器通信
方式:创建虚拟网络,放到同一网络
1、创建一个名为test-net的网络
docker network create test-net
2、运行 Redis 在test-net网络,别名redis
docker run -d --name redis --network test-net --network-alias redis redis:latest
3、修改代码中访问redis的地址为网络别名
示例项目中app.js注释放开-两个地方的注释都放开
const redis = require('redis');
let rds = redis.createClient({url: "redis://redis:6379"});
rds.on('connect', ()=> console.log('redis connect ok'))
rds.connect();
4、运行 Web 项目,使用同个网络
docker run -p 8080:8080 --name test -v D:/test:/app --network test-net -d test:v1
5、查看数据
http://localhost:8080/redis
容器终端查看数据是否一致
显示on test redis page, 44 count 1
6、更多相关命令
docker ps
查看当前运行中的容器
docker images
查看镜像列表
docker rm container-id
删除指定 id 的容器
docker stop/start container-id
停止/启动指定 id 的容器
docker rmi image-id
删除指定 id 的镜像
docker volume ls
查看 volume 列表
docker network ls
查看网络列表
docker-compose
用途
简化多容器服务
安装
Desktop版已经包含
非Desktop版需要单独安装:https://docs.docker.com/compose/install/#install-compose-on-linux-systems
编写脚本
docker-compose.yml:描述依赖哪些服务
参考:https://docs.docker.com/compose/
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:
运行
在docker-compose.yml
文件所在目录,执行:docker-compose 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]
测试
访问网址
localhost
localhost/hello/easydoc
localhost/hello/svnbucket
localhost/redis
发布和部署
官方镜像库:https://hub.docker.com/
docker 官方的镜像托管有时候上传和下载都太慢了,如果你想要更快的速度,可以使用阿里云的免费镜像托管
上传镜像
1、注册账号
https://hub.docker.com/:这里我用的是github账号+邮箱确认
2、创建镜像仓库
Create repository
3、命令行登录账号
docker login -u username
输入密码
4、新建一个tag,名字必须跟你注册账号一样
docker tag test:v1 username/test:v1
5、推上去
docker push username/test:v1
6、部署试下
docker run -dp 8080:8080 username/test:v1
注:
docker-compose 中也可以直接用这个镜像了
image: username/test:v1
备份和迁移数据
需求
容器中的数据,如果没有用挂载目录,删除容器后就会丢失数据
迁移方式
根据挂载目录的方式
bind mount:直接复制目录
volume:特殊方式-数据是由容器创建和管理的
备份和导入volumn的流程
备份
1、运行一个ubuntu容器,挂载要备份的volumn到容器,必能挂载主机目录
2、运行tar命令把数据压缩成一个文件
3、把备份文件复制到要导入的及其
导入
1、运行ubuntu容器,挂载容器的volumn,并且挂载宿主机备份文件所在目录到容器里
2、运行他人命令解压备份文件到指示目录
示例
备份MangoDB的数据
1、运行一个mongodb,创建一个名叫mongo-data的volume指向容器的/data目录
docker run -p 27017:27017 --name mongo -v mongo-data:/data -d mongo:4.4
这里可以用MangoDB连接工具修改下数据并保存
2、运行一个 Ubuntu的容器,挂载mongo容器的所有volume,映射宿主机的 backup 目录到容器里面的 /backup 目录,然后运行 tar 命令把数据压缩打包
docker run --rm --volumes-from mongo -v d:/backup:/backup ubuntu tar cvf /backup/backup.tar /data/
3、最后你就可以拿着这个backup.tar 文件去其他地方导入了。
4、恢复数据:运行一个ubuntu容器(另一个),挂载mongo容器的所有volumes,然后读取/backup目录中的备份文件,解压到/data/目录
docker run --rm --volumes-from mongo -v d:/backup:/backup ubuntu bash -c "cd /data/ && tar xvf /backup/backup.tar --strip 1"
这里可以用MangoDB连接工具看下是否有数据
标签:容器,--,redis,了解,https,镜像,docker From: https://www.cnblogs.com/circlelll/p/17988809