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
- 安装docker
开启内核的流量转发
cat <
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
- 配置hub 加速
编辑 etc/docker/daemonjson
systemctl enable docker 开机自启
systemctl restart docker
- 使用
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 -it IMAGE_ID 服务名 -i 交互式命令行操作 -t 开启个终端
容器的提交
docker commit 进程id dockerhub_user/位置
pip3 install --upgrade pip
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 查看具体挂载路径
- 构建 docker build 文件(Dockerfile)
会自动检测当前的dockerfile文件
- 导出镜像
要将 Docker 本地容器转移到另一个无网络环境的机器上进行部署,可以按照以下步骤操作:
导出 Docker 镜像: 首先,您需要在拥有网络连接的设备上使用
docker save
命令导出所需的 Docker 镜像。例如,假设您要导出的镜像名为your-image
,可以使用以下命令:bashdocker save -o your-image.tar your-image
传输
.tar
文件: 使用您选择的文件传输方法(如scp
、USB 驱动器等)将.tar
文件传输到目标机器。若使用scp
,可以执行类似下面的命令:bashscp your-image.tar username@target-machine:/path/to/destination
在目标机器上加载 Docker 镜像: 在无网络连接的目标机器上,使用
docker load
命令将传输到的.tar
文件加载为 Docker 镜像:bashdocker load -i your-image.tar
运行 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
可以写入目标路径,以便它可以更新文件。一种常见的模式是使用COPY
Dockerfile 中的指令将初始内容复制到容器中。要确保此类文件归配置的用户所有,请使用以下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
Ciallo~(∠・ω< )⌒★