1. 安装

  1. yum 配置

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

wget -O /etc/yum.repos.d/Centos-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all 清缓存

yum makecache 更新

yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftopiotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel 常用的工具

systemctl disable firewalld

systemctl stop firewalld

  1. 安装docker

开启内核的流量转发

cat < /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.ip_forward=1
EOF

加载

modprobe br_netfilter

sysctl -p /etc/sysctl.d/docker.conf

curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all && yum makecache

yum list docker-ce —showduplicates |sort -r

  1. 配置hub 加速

编辑 etc/docker/daemonjson

systemctl enable docker 开机自启

systemctl restart docker

  1. 使用
docker pull name 拉取镜像
docker search name:tag 搜索镜像
docker image ls 查看本地镜像 
docker rename 1 2 name
docker start -i ID 启动进入容器bash
docker rmi IMAGE_ID 删除镜像  tips: 不能有被依赖的容器记录 使用rm 先删除 记录
docker run -参数 serve_name  常用 -d 后台 -p 主机num1:容器num2 端口映射 -P随机映射 
-v 本地的卷映射 
--mount source=volume_name 自动创建卷 ,targe=/Path 指定挂载的路径
--name=进程描述
docker ps 查看运行的容器 -aq 只显示id
docker stop IMAGE_ID 使用的是本机的内核
docker un/pause name 暂停/恢复
docker exec -it CONTAINER_ID  bash 进入镜像里  --rm 退出时删除
docker info 查看服务信息
docker rm IMAGE_ID 删除容器记录
docker image save name:tag > /目录 导出镜像
docker commit 容器id 新name
docker image load -i /镜像目录
docker image inspacet IMAGE_ID 查看容器的信息
docker logs -f  IMAGE_ID 查看容器日志 -f实时刷新
docker container inspect CONTAINER_ID 查看容器的详细信息用于高级的调试
docker port IMAGE_ID 显示服务的端口
docker tag IMAGE_ID name 更改镜像名
docker import .tar 镜像名 导入创建一个新的容器
docker export .tar 镜像名 导出
docker cp 复制到容器/主机
docker port 
使用重定向 > 导入 导出镜像

docker run常用参数-腾讯云开发者社区-腾讯云

docker run -it IMAGE_ID 服务名 -i 交互式命令行操作 -t 开启个终端

容器的提交

docker commit 进程id dockerhub_user/位置

pip3 install --upgrade pip

  1. dockerfile

    scratch :表示一个空镜像 纯净的文件系统

FROM centos:6.8  //基础镜像 特殊: **scratch** 表示一个空镜像
MAINTAINER   //制作人
RUN          //执行的命令linux(
ADD          //将宿主机的文件添加到容器内 (会自动解压) 支持网络拉取文件
COPY         //仅复制 --from
copy 本机 /容器/
USER name 切换用户
WORKDIR      //工作目录切换  
VOLUME       //目录映射 相当于mount 挂载
EXPOSE       //端口映射 指定对外的端口
CMD          //当容器启动时所执行的指令 
CMD ["cat","/etc/"]
运行程序 CMD ["nginx","-g","daemon off;"]
ENTRYPOINT  升级的CMD兼容其他参数
ENV NAME="name" 设置环境变量 镜像和运行时都存在
ENV AGE="18"
ARG 只用于构建时使用的
VOLUME /路径 ["/data","/data2"] 将本目录变为可挂载设备
使用 docker container inspect CONTAINER_ID 查看具体挂载路径 
  1. 构建 docker build 文件(Dockerfile)

会自动检测当前的dockerfile文件

  1. 导出镜像

要将 Docker 本地容器转移到另一个无网络环境的机器上进行部署,可以按照以下步骤操作:

  1. 导出 Docker 镜像: 首先,您需要在拥有网络连接的设备上使用 docker save 命令导出所需的 Docker 镜像。例如,假设您要导出的镜像名为 your-image,可以使用以下命令:bash

    docker save -o your-image.tar your-image
    

    该命令会将 Docker 镜像保存为一个 .tar 文件 9 10 。

  2. 传输 .tar 文件: 使用您选择的文件传输方法(如 scp、USB 驱动器等)将 .tar 文件传输到目标机器。若使用 scp,可以执行类似下面的命令:bash

    scp your-image.tar username@target-machine:/path/to/destination
    
  3. 在目标机器上加载 Docker 镜像: 在无网络连接的目标机器上,使用 docker load 命令将传输到的 .tar 文件加载为 Docker 镜像:bash

    docker load -i your-image.tar
    

    加载完毕后,可以使用 docker images 命令查看已加载的镜像 3 5 。

  4. 运行 Docker 容器: 一旦镜像加载完成,您可以按照常规方式运行容器:bash

    docker run -d your-image
    

这些步骤提供了一种无网络环境下在另一台机器上部署 Docker 容器的方法,如需多容器部署,您还可以考虑使用 Docker Compose,但在这种情况下,请确保所有相关的镜像也一并导出并在目标机器上加载 6 10 。

Docker compose

编写

name: XXXX           # 给整个项目起一共名字

services: 
    web:               # 第一个服务名
        build: .         # 使用本目录下dockerfile
        ports:
        - "8000:5000"
    redis:             # 第二个服务名
      image:"redis:alpine"   
        
services:
  frontend:
    image: example/webapp
    ports:
      - "443:8043"
    networks:               # 只是区分网段
      - front-tier
      - back-tier
    configs:
      - httpd-config
    secrets:
      - server-certificate

  backend:
    image: example/database
    volumes:
      - db-data:/etc/data
    networks:
      - back-tier

volumes:
  db-data:
    driver: flocker
    driver_opts:
      size: "10GiB"

configs:
  httpd-config:
      file: ./文件
    external: true

secrets:
  server-certificate:
    external: true

networks:
  # The presence of these objects is sufficient to define them
  front-tier: {}
  back-tier: {}
services:
  proxy:
    image: nginx
    volumes:
      - type: bind                             # 绑定挂载
        source: ./proxy/nginx.conf             # 本机源
        target: /etc/nginx/conf.d/default.conf # 容器内
        read_only: true                        # 是否只读
    ports:
      - 80:80
    depends_on:                                # 依赖项 先启动这个
      - backend

  backend:
    build:
      context: backend                         # 
      target: builder

Compose Watch

https://docs.docker.com/compose/how-tos/file-watch/

watch 还要求容器USER可以写入目标路径,以便它可以更新文件。一种常见的模式是使用COPYDockerfile 中的指令将初始内容复制到容器中。要确保此类文件归配置的用户所有,请使用以下COPY --chown标志:

# Run as a non-privileged user
FROM node:18
RUN useradd -ms /bin/sh -u 1001 app
USER app

# Install dependencies
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install

# Copy source files into application directory
COPY --chown=app:app . /app

action 设置

action: sync                    # 主机上的文件所做的任何更改都会自动与服务容器内的相应文件匹配。
Example:
services:
  web:
    build: .
    command: npm start
    develop:
      watch:
        - action: sync
          path: ./web
          target: /src/web
          ignore:
            - node_modules/
        - action: rebuild
          path: package.json
#-----------------------------------------------------------------------------------------------

action: sync+restart            # Compose 会将您的更改与服务容器同步并重新启动它。

Example:
services:
  web:
    build: .
    command: npm start
    develop:
      watch:
        - action: sync
          path: ./web
          target: /app/web
          ignore:
            - node_modules/
        - action: sync+restart
          path: ./proxy/nginx.conf
          target: /etc/nginx/conf.d/default.conf

  backend:
    build:
      context: backend
      target: builder

action: rebuild                 # Compose 会自动使用 BuildKit 构建一个新的镜像并替换正在运行的服务容器。
                                # == docker compose up --build .yml
Example:

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    # 这里配置 watch 来监控文件更改
    deploy:
      restart_policy:
        condition: any
    watch:
      action: rebuild