Docker

##Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化; 容器是完全使用沙箱机制,相互之间不会有任何接口。##镜像与容器之间关系:容器是基于镜像搭建的,一个镜像可以搭建多个容器
##相关连接
https://www.docker.com/
https://www.docker.org.cn/
https://hub.docker.com/       #  username fuguiwangquan  passwd  123456Szs!

安装

yum remove docker docker-client docker-client-latest  docker-common docker-latest  docker-latest-logrotate  docker-logrotate  docker-engine  ##卸载原来版本
yum install -y yum-utils ##安装依赖
yum-config-manager \
>     --add-repo \
>     https://download.docker.com/linux/centos/docker-ce.repo  ##指定 镜像下载地址

yum install docker-ce docker-ce-cli containerd.io #下载docker

#添加开机自启
systemctl start docker # 启动docker 服务
docker -v # 查看docker 版本
systemctl enable docker #添加开机自启

##docker 换国内源
mkdir -p /etc/tee /etc/docker/daemon.json <<-'EOF'
cd /etc/docker
> {
>   "registry-mirrors": ["https://kru7klna.mirror.aliyuncs.com"]
> }
> EOF

docker 命令

镜像操作

查看本地镜像
docker images 
docker image ls 
docker images --digests ## --digests 显示镜像摘要
查看 拉取 删除 镜像
docker search golang #查看镜像
docker pull golang #拉取镜像
docker rmi image_id #删除镜像
更新镜像
docker run -it ubuntu:v1 /bin/bash ##运行镜像产生新容器,it、bin/bash打开新终端 ubuntu:v1 镜像名;进入容器
apt-get update #容器更新
docker commit -m="has update" -a="runoob" container_id runoob/ubuntu:v2 #commit 提交容器副本 m 提交描述 a 提交作者 runoob/ubuntu 镜像名 
运行镜像产生容器
##本地查找镜像,未找到拉取新镜像
docker run ubuntu:15:10 echo "hello word"  #run 运行 ubuntu:15:10 镜像名,echo 镜像内命令。
docker run -it ubuntu /bin/bash    #-i 交互式操作,-t终端 bash 命令打开新的操作窗口
docker run -itd ubuntu /bin/bash # -d 后台操作,默认不打开

构建镜像

dockerfile 文件
#Dockerfile 文件:构建镜像的文本文件。

#格式
FORM nginx   #FORM 指明基于那种基础镜像
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz  #&& 与,全1为1,有0为0 ,前面执行成功后执行后面的,
    ## RUN 安装完基础镜像后需要执行的命令。RUN + 命令 RUN ["可执行文件",“执行参数”,“执行参数”]
RUN yum gcc ##尽量减少使用RUN, 使用一次RRUN 基于之前环境生成一层镜像
#补充 dockerfile 文件其他命令
# MAINTAINER- 镜像维护者信息
# RUN- 构建镜像时执行的命令,每一次RUN都会构建一层
# CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数
# VOLUME- 定义数据卷,如果没有定义则使用默认
# USER- 指定后续执行的用户组和用户
# WORKDIR- 切换当前执行的工作目录
# HEALTHCHECH- 健康检测指令
# ARG- 变量属性值,但不在容器内部起作用
# EXPOSE- 暴露端口
# ENV- 变量属性值,容器内部也会起作用
# ADD- 添加文件,如果是压缩文件也解压
# COPY- 添加文件,以复制的形式

docker compose

#compose 文件 ,文件格式 .yaml 后缀文件
配置服务,修改服务状态,批量装docker 
格式 YAML 文件包含 4 个一级 key:version 文件格式(主要是 API)的版本 、services (定义不同的应用服务)、networks(指引 Docker 创建新的网)、volumes(用于指引 Docker 来创建新的卷)
version: '3'
services:
  web:       #定义web 服务
    build: . #选择当前目录的dockerfile 
    ports: #选择端口
   - "5000:5000"
    volumes:
   - .:/code 
    - logvolume01:/var/log
    links:
   - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

构建

docker build -t REPOSITORY/tag . #docker执行构建 相当于客户端,需要用到dockerfile "." 将上下文映射到docker 

#####

docker 上传本地镜像至docker hup
docker login #登陆docker  username fuguiwangquan  passwd  123456Szs!
docker tge REPOSITORY/TAG USERNAME/REPOSITORY/TAG # 标记本地镜像,将其归入某一仓库
docker image ls #查看是否 存在标记的镜像,未生成新镜像
docker push USERNAME/REPOSITORY/TAG #推送镜像到仓库
docker search USERNAME/REPOSITORY #查看仓库带该标签的镜像
docker logout #退出登陆

docker 网络

新建 、查看、 删除docker 网络
docker network create -d bridge net-name ##创建,-d 指定网络类型  
docker network ls ##查看 docker 网络
docker network prune ##删除未使用docker网络

创建互联关系容器

docker run -itd --name test1 --network test-net ubuntu /bin/bash  ##-name 指定容器名字
docker run -itd --name test2 --network test-net ubuntu /bin/bash  ## --network 指定网络
ping test1 # 测试容器互相的连通性

补充:docker 网络类型

 Bridge container          # 桥接式网络模式(默认)
 Host(open) container      # 开放式网络模式,和宿主机共享网络
 Container(join) container # 联合挂载式网络模式,和其他容器共享网络
 None(Close) container     #封闭式网络模式,不为容器配置网络

容器使用

查看 重启 停止容器状态
docker ps -a && docker ps ## 前者查看全部状态的,后者只能看到运行状态
docker stop CONTAINER_ID/names #停止
docker restart CONTAINER_ID/names #重启
接入后台运行容器
docker attach CONTAINER_ID/names           #exit 后容器终止
docker exec CONTAINER_ID/names  /bin/bash  #退出后容器继续运行
退出docker 运行环境
ctrl+d && exit ##停止容器,退出环境
导出导入镜像
docker export container_id > ubuntu.tar #导出镜像快照到ubuntu.tar
docker ubuntu.tar| docker import -test/ubuntu:v1 #将镜像快照导入为镜像
docker import http://example.com/exampleimage.tgz example/imagerepo  ##指定 URL 或者某个目录来导入
删除容器
docker rm -f CONTAINER_ID/names ##清除指定容器
docker contaier prune ##清除终止状态容器
容器运行中的信息查看
docker logs -f CONTAINER_ID/names #查看容器报错日志
docker top CONTAINER_ID/names #查看容器进程
docker inspect CONTAINER_ID/names #查看容器基本信息
docker port CONTAINER_ID/names #查看容器映射端口
作者:admin  创建时间:2023-04-27 13:29
最后编辑:admin  更新时间:2024-07-17 15:26