文章目录
1.安装docker
centos使用以下命令, 不同的系统参考菜鸟教程:
菜鸟教程
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2.修复报错
刚安装好后, 会有报错现象:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
此时使用命令修复问题,
sudo systemctl daemon-reload
sudo systemctl restart docker.service
3.下载portainer
使用命令拉取最新的portainer应用
sudo docker pull portainer/portainer-ce:latest
4.开始部署容器
sudo docker run -d --restart=always -p 8080:9000 portainer/portainer-ce
5.登陆容器中应用
在浏览器中输入应用ip+端口号
就可以访问刚才部署好的容器
docker常用命令
以下是一些常用的Docker命令列表:
docker run:创建并运行一个新的容器。
docker start:启动一个或多个已停止的容器。
docker stop:停止一个正在运行的容器。
docker restart:重启一个容器。
docker pause:暂停一个正在运行的容器。
docker unpause:取消暂停一个容器。
docker rm:删除一个或多个容器。
docker ps:列出当前正在运行的容器。
docker images:列出本地镜像。
docker pull:拉取一个镜像到本地。
docker push:将一个本地镜像推送到远程仓库。
docker exec:在正在运行的容器中执行命令。
docker logs:查看容器的日志输出。
docker inspect:获取容器或镜像的详细信息。
docker build:根据 Dockerfile 构建一个镜像。
docker network:管理 Docker 网络。
docker volume:管理 Docker 卷。
docker-compose:使用 Docker Compose 来管理多个容器应用。
这只是一小部分常用的Docker命令,还有更多命令和参数可以根据需要进行使用。你可以使用 docker --help 命令来获取更多关于 Docker 命令的帮助和文档。
docker和k8s分别用在什么场景?各自特点
Docker和Kubernetes(通常简称为K8s)是两个不同的工具,用于不同的场景:
Docker适用于以下场景:
应用程序的容器化:Docker可以将应用程序及其依赖项打包成一个独立的容器,使应用程序在不同的环境中具备可移植性和一致性。
简化开发和测试:通过使用Docker容器,开发人员可以创建隔离的、可复制的开发和测试环境,避免了本地环境配置的差异问题。
部署和扩展微服务架构:Docker容器可以快速部署和扩展容器化的微服务,提供了更高的弹性和可伸缩性。
持续集成和持续交付:Docker容器可以与持续集成/持续交付(CI/CD)流程集成,简化和加速软件交付过程。
Kubernetes适用于以下场景:
容器编排和管理:Kubernetes提供了一套强大的工具和机制来自动化、编排和管理容器化应用程序。它可以管理大规模的容器集群,并确保应用程序的高可用性、弹性和可伸缩性。
服务发现和负载均衡:Kubernetes具备内建的服务发现和负载均衡机制,可以自动将流量路由到正确的容器实例,并确保容器的高可用性。
自动伸缩:Kubernetes支持水平扩展和自动伸缩,可以根据应用程序的负载情况自动调整容器副本数量。
跨云和多区域部署:Kubernetes是一个跨云和多区域的平台,可以将应用程序轻松地部署到不同的云提供商或地理位置,提供了更大的灵活性和可移植性。
综上所述,Docker适合于单个主机上的容器化开发和部署,而Kubernetes则适合于管理大规模、复杂的容器集群以及提供高级的编排、自动化和管理功能。通常使用Docker来构建和打包容器镜像,并使用Kubernetes来部署和管理这些镜像。
docker演变进程
容器化技术:
更快的对应用进行标准化部署。
物理机时代-> 虚拟机时代->容器化时代。
物理机时代:
部署非常慢
成本高。
资源浪费。
难以扩展和迁移。
受制于硬件。x86, solaris, 硬件系统和服务器平台。
虚拟化技术:
多部署。
资源池:把硬件资源看成池子, 池子中资源可以共享。
资源隔离: 资源独享
很容易扩展:
vm需要安装操作系统:
容器化时代:
容器以文件的方式进行提供。
标准化环境应用部署。
通过容器编排工具, 可以自动将容器发布到各个节点上, 一键发布、管理。
容器中包含了所有要运行的必要条件。
标准化的迁移方式
统一的参数配置
自动化部署:进行镜像还原的过程自动完成, 无需人工参与。
应用集群监控:
开发与运维之间的沟通桥梁。
docker介绍:
开源的应用容器引擎, 基于go语言开发
容器完全基于沙箱机制, 容器开销极低。非常轻松的一台电脑部署多个容器。
docker基本就是容器化技术的代名词。
docker也具备一定的虚拟化职能。
docker deamon守护进程:镜像获取, 容器创建。
rest api :小的tomcat. http请求响应。
应用协议采用http
docker cli: 命令行工具
基于c/s架构, 服务器和客户端不用布置在同一台电脑上。
容器与镜像:
镜像:镜像是文件, 只读的, 提供了运行程序完整的软硬件资源,
是应用程序的集装箱。
容器:容器是镜像的实例, 由docker负责创建, 容器之间彼此隔离。
docker执行流程:
docker deamon守护进程。
client用于发送命令-host接收命令, 处理- registry用于储存镜像提供下载功能。
docker常用命令
docker快速部署tomcat
docker pull 镜像名<:tags> -从远程仓库抽取镜像
docker images -查看本地镜像
docker run 镜像名<:tags> -创建容器, 启动应用。
docker ps -查看正在运行中的镜像
docker rm <-f> 容器id -删除容器。
docker rmi <-f> 镜像名:<tags> -删除镜像。
docker run -p 8000:8080 -d tomcat
-p代表端口映射
-d代表后台运行
docker rm + 容器编号, 删除容器
删除容器之前, 需要先停止容器运行,
docker stop + 容器编号 =》 然后再执行 docker rm
在容器内部执行命令。
格式:
docker exec [-it] 容器id /bin/bash
容器在宿主机上默认存放的位置在:/var/lib/docker
容器生命周期:
docker create + 容器id
docker start + 容器id
docker ps -a 显示所有容器
docker stop +容器id
docker unpause + 容器id
Dockerfile构建镜像:
Dockerfile是镜像描述文件:
dockerfile是一个包含用于合并组合镜像的命令的文本文件
docker通过读取dockerfile中指令按照步骤自动生成镜像
docker build -t 机构/镜像名<:tags> Dockerfile目录
docker build -t zhongwusun/mywebapp:1.0 .
镜像分层、快照
分层、系统快照、
构建过程中每执行一次都会有快照。加快镜像构建速度。节省资源。
dockerfile的基础指令:
Dockerfile执行指令:
cmd命令不一定会被执行。
entrypoint一定会被执行, 当有多个entrypoint, 则最后一个会被执行。
构建redis镜像:
对应dockerfile文件编写
FROM centos
#安装对应依赖工具项目
RUN ["yum", "install", "-y", "gcc", "gcc-c++", "net-tools", "make"]
WORKDIR /usr/local
ADD redis-4.0.14.tar.gz ./
WORKDIR /usr/local/redis-4.0.14/src
RUN make && make install
WORKDIR /usr/local/redis-4.0.14
ADD redis-7000.conf .
#对外暴露7000端口
EXPOSE 7000
CMD ["redis-server", "redis-7000.conf"]
容器间link单向通信
每个docker容器都会有自己环境的虚拟ip:
容器间的虚拟ip之间默认连通
docker run -d --name web tomcat
生成了一个名为web的容器。
docker run -d --name database -it centos /bin/bash
生成一个稳定后台运行的database。
docker inspect 容器id 查看容器属性。
使用–link关联容器, 实现容器间单向通信, 即使ip地址发生变化, 也能实现连通。
docker run -d --name web --link database tomcat
Bridge网桥双向通信。
docker network ls 可以列出网络明细。
docker会提供默认的网桥, 一般需要新创建网桥。
创建网桥: docker network create -d my-bridge
docker network connect my-bridge web 将web的容器连接到新创建的网桥。
docker network connect my-bridge database
网桥实现原理
相当于是创建网桥的时候, 就是默认创建了一个虚拟网卡。
volume容器间共享数据
在宿主机上实现多个容器间文件内容共享。
方法一(挂载宿主机目录):
docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名
方法二:创建共享容器
docker create --name webpage
-v /webapps:/tomcat/webapps tomcat /bin/true
共享容器挂载点:
docker run --volumes-from webpage --name t1 -d tomcat
挂载
docker run --name t1 -p 8000:8080 -d -v /data/pages:/usr/local/tomcat/webapps tomcat
创建共享容器
docker create --name webpage -v /data/pages:/usr/local/tomcat/webapps tomcat /bin/true
docker run -p 8002:8000 --volumes-from webpage --name t3 -d tomcat
docker compose使用
docker compose
容器编排工具。
先部署哪个, 后部署哪个, 操作就是容器编排。
docker compose 单机多容器的部署工具
通过yml文件定义多容器如何部署
win/mac默认提供docker compose , linux需要安装。
使用docker compose 来编排一个wordpress应用。
创建docker-compose.yml文件, 内容为:
#指定 docker-compose.yml 文件的版本
version: '3.3'
# 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
# 定义容器重启策略
restart: always
# 设置环境变量, environment 的值可以覆盖 env_file 的值
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
#docker-compose up 以依赖顺序启动服务,先启动db
depends_on:
- db
image: wordpress:latest
# 建立宿主机和容器之间的端口映射关系,容器的 80 端口和宿主机的 8000 端口建立映射关系
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
# 定义容器和宿主机的卷映射关系, 其和 networks 一样可以位于 services 键的二级key和 compose 顶级key, 如果需要跨服务间使用则在顶级key定义, 在 services 中引用
volumes:
db_data: {}
docker-compose实战
docker-compose文件示例:
#名称, 版本
version: '3.3'
#用于描述要部署的容器以及相关信息
services:
db:
build: ./bsbdj-db/
# 容错机制, 上面服务宕机会进行重启容器并替换
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
app:
build: ./bsbdj-app/
#设置依赖
depends_on:
- db
ports:
- "80:80"
restart: always
docker compose down
关闭docker compose运行。
docker compose up -d 后台启动程序