likes
comments
collection
share

这篇带你Docker快速上手~

作者站长头像
站长
· 阅读数 49

Docker

是一个类似虚拟机的功能,解决版本管理,项目环境不同,系统不同的问题,最直接把所有项目有关的东西进行一个打包。

可以理解成一个鲸鱼去送快递,并且只有一个大快递,他的存储方式采用分级存储,相互隔离。

原理

这篇带你Docker快速上手~

  • 镜像(image):首先镜像是只读的,它里面打包了所有的项目的内容和依赖、函数库等

  • 容器(container):通过类似一个操作系统的效果对镜像进行运行包装

  • 仓库(repository):存放镜像的地方

  • 远程仓库(registry):镜像托管的一个远程服务器,类似还有阿里云镜像服务

    流程就是客户端进行命令后进入守护进程,然后去进行镜像创建或者拉取,然后创建对应的容器就行了

对比虚拟机

1、Dokcer有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

2、docker利用的是宿主机的内核,vm 需要是Guest OS

这篇带你Docker快速上手~

搭建

要求 CentOS 系统的内核版本高于 3.10,

首先要准备虚拟机VM,然后用Xshell进行,这里连接需要的ip要去虚拟机里面查

ifconfig就可以查到VM8的IP地址,然后用户名采用root

注意进行随便找个下载文档就行了,选择centos7

镜像加速,上阿里云服务器就行,需要进行登录去然后粘贴修改配置就行(例子)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://23kt8v9a.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

这篇带你Docker快速上手~

这样就表示安装成功

依次跑下面的命令

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
  
    
    yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast
    
    yum install docker-ce docker-ce-cli containerd.io
    
    systemctl start docker
    
    systemctl enable docker
    
    docker version
    

然后放火墙需要注意,搭建后的服务对于一些端口是需要放行的,所以注意要关闭防火墙或者进行放行。

命令

docker xxx --help 就可以去找所有命令

要学会crud就行了

镜像命令

docker build 创建镜像

docker pull 拉取镜像 可以去dockerhub去网站找他的相关命令

docker push 放进仓库

docker images 查看当前镜像

docker rmi xxx 删除镜像 load -i nginx.tar

docker save 可以压缩镜像导出到磁盘 比如save -o nginx.tar nignx:latest

docker load 加载镜像

容器命令

docker run 运行容器 docker run --name ContainerName -p 80:80 -d nginx 这里左边是宿主主机端口,右边是容器端口,可以做映射

docker stop 停止容器,注意这个 停止容器是直接容器停止,缓存不见

docker start 开始被停止掉的容器,但是是重新创建,相当于重启

docker pause 暂停(真正的停止容器),保留缓存

docker unpause 运行暂停的容器

docker logs 获取日志,-f 可以进行跟踪日志

docker ps 查看所有运行的容器 -a 可以查所有容器

docker exec 进入容器执行命令 -it 创建标准输入,输出终端,允许和容器交互 bash

docker rm -f 强制删除容器

访问映射后的nginx 并且跟踪日志

这篇带你Docker快速上手~

这篇带你Docker快速上手~

数据卷命令

本质上是一个volume虚拟目录,他可以去让磁盘和容器目录文件进行一个关联,也可以容器之间的数据进行一个共享,当更换容器后只需要去关联volumes目录的文件就可以进行一个共享数据

这篇带你Docker快速上手~

docker volume create 创建数据卷

docker volume ls 查看数据卷

docker volume inspect 可以查看这个数据卷的所有信息

docker volume rm 删除指定数据卷

docker volume prune 删除所有未使用的数据卷

docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx

-v表示启动的时候挂载,左边是数据卷名,右边可以在官网查数据位置,哪怕数据卷不存在也会自动创建

这篇带你Docker快速上手~

挂载后直接用类似fz去进行修改文件,找到路径后直接修改文件,这个工具是把他加载到本地挂载。修改本地临时文件后会检测到直接重新上传,最好是在后面指定它的编码。

还有一种直接挂载数据目录,这种情况最好是进行一个,比如一个mysql的容器开启,需要去指定宿主主机目录,并且有data和conf,在conf里面还需要有配置文件hmy.cnf这个就可以进行和原有mysql的配置进行一个合并变成my.ini

docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123 \
-p 3306:3306 \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25

镜像结构

这篇带你Docker快速上手~

Docker Image 是有一个层级结构的,最底层的 Layer 为 BaseImage(一般为一个操作系统的 ISO 镜像),然后顺序执行每一条指令,生成的 Layer 按照入栈的顺序逐渐累加,最终形成一个 Image。并且每个镜像都会有一个入口作为程序启动的脚本

Dockerfile

# 指定基础镜像,FROM指令是必须的
FROM ubuntu:16.04    
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK,run指令后面直接跟shell指令就行
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

这就是一个完整的java项目构建,但是发现前面机会都是在配置环境变量,所以实际上是有进行一个封装好的java环境镜像

#配置java环境
FROM java:8-alpine    #报错采用openjava:8-alpine
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

DockerCompose

他是可以通过文件配置进行一个集群部署的工具

去拉取文件

修改文件权限:

注意要修改文件权限让他可执行X权限

修改文件权限:也可以用客户端工具直接改

# 修改权限
chmod +x /usr/local/bin/docker-compose

Base自动补全命令:

# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

如果这里出现错误,需要修改自己的hosts文件:还不行就重启docker

echo "192.168.37.128 raw.githubusercontent.com" >> /etc/hosts

build 重新构建服务 ps 列出容器 up 创建和启动容器 exec 在容器里面执行命令 scale 指定一个服务容器启动数量 top 显示容器进程 logs 查看容器输出 down 删除容器、网络、数据卷和镜像 stop/start/restart 停止/启动/重启服务

关于部署

第一步打包项目,注意一些数据库等的地址和密码的设置,可以采用服务名去直接访问

第二步编写dockerfile文件,里面要写好FROM,COPY,ENTERENTRY等配置信息

第三部编写dockerCompose.yml文件,这里需要指定好各个服务dockerfile文件

如果是镜像就去写镜像的文件,如果是jar包等就需要去根据dockerfile文件进行创建镜像,最后在需要的地方指定端口

version: "3.2"

services:
  nacos:
    image: nacos/nacos-server    #nacos镜像位置
    environment:
      MODE: standalone
    ports:
      - "8848:8848"     #nacos需要指定端口暴露
  mysql:      #把mysql的镜像进行配置号密码和data与conf文件的挂载
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
      #服务的构建会自动去找目录的dockerfile文件
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"  #网关端口,到时直接访问该地址就行

镜像仓库

带有图形化界面

使用DockerCompose部署带有图象界面的DockerRegistry,创建一个docker-compose.yml配置如下信息:

最好是创建一个文件夹弄,然后执行

cd /tmp/registry-ui
docker-compose up -d
# 进入文件夹并且创建
#相当于用tag指令增加前缀为仓库地址
docker tag nginx:latest 192.168.37.128:8080/nginx:1.0
#注意和原来的是同个id的镜像,也就是一个镜像
docker push/pull 192.168.37.128:8080/nginx:1.0

这篇带你Docker快速上手~

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=我的仓库
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry

配置Docker信任地址

私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:也可以借助fz工具进行修改

# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:信任地址,另一个mirrors是可以改国内镜像,增加在json格式的里面
"insecure-registries":["http://192.168.37.128:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker

然后访问8080端口就可以进入页面 !这篇带你Docker快速上手~

转载自:https://juejin.cn/post/7352762865072783379
评论
请登录