首页 > 其他分享 >了解docker

了解docker

时间:2024-01-26 10:48:18浏览次数:30  
标签:容器 -- redis 了解 https 镜像 docker

快速入门

视频参考: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

相关文章

  • 了解gitlab-ci流程
    了解gitlab-ci流程作用GitLabCI是GitLab内置的进行持续集成的工具。它的中心思想是,当每一次push到GitLab的时候,都会触发一次脚本执行,脚本的内容可以包括测试、编译、部署等一系列自定义的内容。在GitLab中,要使用CI,需要在仓库根目录下创建一个名为.gitlab-ci.yml的文件,并配置Gi......
  • 使用docker部署编译环境并使用gitlab-ci实现代码自动打包
    使用docker部署编译环境并使用gitlab-ci实现代码自动打包一、需求1、需求描述实现代码git仓库提交能够自动编译出结果①需要一个编译环境能够共享编译:使用docker创建镜像来维护,创建完毕无需频繁修改②使用gitlab的ci进行持续继承,代码提交自动打包,ci中会使用①中的镜像作为运......
  • 【译】解开托管内存的秘密:深入了解事件处理程序泄漏!
    事件处理程序泄漏已经存在很长时间了,这是WPF(WindowsPresentationFoundation)开发人员经常要处理的最麻烦的问题之一。您可能会想:是什么让事件处理程序泄漏如此重要?事件处理程序泄漏很容易引起,只需忘记取消订阅事件即可。此外,它们很难发现,甚至更难修复。在更新17.9预......
  • 【docker-compose】ElasticSearch安装教程
    仅供学习参考,请勿轻易在生产环境使用0.目录树1.创建目录mkdir-p/docker/elasticsearch/conf/docker/elasticsearch/data/docker/elasticsearch/logschmod-R777/docker/elasticsearch/conf/docker/elasticsearch/data/docker/elasticsearch/logs2.编写配置......
  • 了解Java事务管理
    在软件开发过程中,事务管理是一个非常重要的概念.事务用于确保数据库操作的一致性和完整性,并且具有原子性、一致性、隔离性和持久性的特性.Java提供了强大的事务管理机制,使得我们能够更好地处理数据的一致性和并发控制.Java事务管理主要通过JavaTransactionAPI(JTA)和Java......
  • DOCKER 镜像创建
    DOCKER镜像创建 基于现有镜像创建 #创建个新的容器 #进入创建的容器里,下载epel源 #再下载个nginx #启动nginx #配置测试文件 #创建个新的镜像 #没有起来,基于本地的容器创建的镜像所创建的容器没有启动命令,要加上启动命令#根据新镜像创建个容器 #进......
  • [转帖]3 分钟了解 NVIDIA 新出的 H200
    https://zhuanlan.zhihu.com/p/439633733内存带宽应该是9.6*1024*6算出来来的实际值4.8TB/S和内存141G应该是进行了一些删减理论上是六个24GB的HBM3e的内存.应该是为了安全和稳定进行了限速不然理论上可以达到接近6BG的带宽和144G的HBM3e的内存大小.英伟......
  • Docker启动Nacos报错:Nacos Server did not start because dumpservice bean construct
    一、表象重启服务器之后Docker运行Nacos容器,启动成功,但是外网无法访问。查看了一下Nacos启动日志(dockerlogsnacos容器名)二、分析很明显是数据库配``置问题。。如果是数据库配置的问题,可以着重检查以下信息尤其是MySQL内网Host,查询方式见Docker安装Nacos三、解决我已......
  • Centos+jenkins+Docker+.Net6 简单使用CI/CD
    jenkins安装1:安装sudodockerpulljenkins/jenkins2:路劲/home/fengge/jenkins_home3:运行:/var/jenkins_home运行数据多了这个错误的东东路径jenkins_homesudodockerrun-d--restart=always--namejenkins-p8081:8080-v/home/fengge/jenkins_home:/var/je......
  • docker 构建遇见的问题一记
    这两天项目里需要使用opencv的库,springboot需要添加opencv,最终确认使用已有的docker4.6+jdk1.8进行改写,首先想到的就是直接将1.8卸载,安装上17,之后再打包,发布到dockerhub上,之后docker-compose下载使用。开始操作,在oracle官网上下载了jdk17,上传至服务器,解压,配置环境变量,java-versi......