解决的问题:

统一标准

  • 应用构建 docker build(镜像)
  • 应用分享 docker hub
  • 应用运行 运行镜像 docker run

    资源隔离

  • cpu、memory隔离

  • 设备隔离与限制
  • 网络隔离

    架构

    Docker容器 - 图2

  • Docker_Host:

    • 安装Docker的主机
  • Docker Daemon:
    • 运行在Docker主机上的Docker后台进程
  • Client:
    • 操作Docker主机的客户端(命令行、UI等)
  • Registry:
    • 镜像仓库
    • Docker Hub
  • Images:
    • 镜像,带环境打包好的程序,可以直接启动运行
  • Containers:

    • 容器,由镜像启动起来正在运行中的程序

      Docker 安装

      安装命令:

      1. curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

      手动安装:

  • 移除以前的docker: yum remove docker

  • 配置yum源:yum install -y yum-utils
  • 安装docker:yum install -y docker-ce docker-ce-cli containerd.io
  • 启动docker:systemctl enable docker --now

    配置docker加速(阿里云获取自己的加速地址)

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
    "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
      "max-size": "100m"
    },
    "storage-driver": "overlay2"
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    Docker常用命令Docker容器 - 图3

    镜像操作

  • 查找镜像:docker serch *

  • 拉取镜像:docker pull nginx 最新版本;docker pull nginx:1.20.1指定版本。
  • 查看下载的镜像: docker images
  • 移除镜像: docker rmi nginx:1.20.1/id
  • 容器启动docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    • docker run --name=mynginx -d --restart=always -p 88:80 nginx -d是后台运行, —restart==always开机自启
  • 查看运行容器docker ps
  • 查看所有容器docker ps -a
  • 删除停止的容器
    • docker rm 容器id/名字
    • docker rm -f 容器id/名字 #强制删除
  • 停止容器docker stop 容器id/名字
  • 再次启动docker start 容器id/名字
  • 应用开机自启docker update 容器id/名字 --restart=always

    容器操作

    进入容器

    进入容器内部的系统,修改容器内容
    docker exec -it 容器id /bin/bash

    #修改nginx欢迎页
    docker exec -it mynginx  /bin/bash
    cd usr/share/nginx/html
    ls
    echo "<h1> welcome to mynginx <h1>" > index.html
    cat index.html
    exit
    

    提交改变

    提交
    docker commit -a "sengg" -m "index.html change" 14a74021b7eb senggnginx:v1.0
    查看 docker image

    镜像传输

  • 方法一本地传输:

docker save -o mynginx.tar senggnginx:v1.0 将镜像打tar包
将tar包传入其他机器之后加载 docker load -i mynginx.tar

  • 远程仓库

    • 注册dockerhub
    • 把旧镜像名字改为仓库要求的新名字:docker tag senggnginx:v1.0 sengg/mynginx:v1.0
    • 创建仓库study_demo https://hub.docker.com/repositories
    • docker 中登录 docker login
    • 推送 docker push sengg/mynginx:v1.0 名字需要和仓库中的一致
    • 登出 docker logout
    • 拉取上传的镜像 docker pull sengg/mynginx:v1.0

      数据挂载

      即将docker容器里面的文件与服务器文件目录关联,只需改动服务器文件即可实现对docker容器内部文件的修改。
      docker run --name=mynginx   \
      -d  --restart=always \
      -p  88:80 -v /data/html:/usr/share/nginx/html:ro  \
      nginx
      

      其他常用命令

  • docker 排错 docker logs 容器名/id

  • 把容器指定位置的东西复制出来

docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf

  • 把外面的内容复制到容器里面

docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf

Docker制作java镜像

Dockerfile文件

FROM openjdk:8-jdk-slim
LABEL maintainer=sengg

COPY target/*.jar   /app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

build打包java文件

docker build -t java-demo:v1.0 -f Dockerfile .
docker build -t java-demo:v1.0 .
  • -t指定打包的target文件。
  • -fDockerfile 指定打包的dockerfile文件。
  • .表示在当前目录下工作,在dockerfile文件指定了target位置。

    启动容器

    docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0
    

    分享镜像

    ```

    登录docker hub

    docker login

给旧镜像起名

docker tag java-demo:v1.0 sengg/java-demo:v1.0

推送到docker hub

docker push sengg/java-demo:v1.0

别的机器

docker pull sengg/java-demo:v1.0

别的机器运行

docker run -d -p 8080:8080 —name myjava-app java-demo:v1.0 ```