Docker基础

基本组成

镜像(image)

Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container)

Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建。

仓库(repository)

仓库就是存放镜像的地方,仓库可以分为共有仓库与私有仓库。

安装

# gcc环境
yum -y install gcc
yum -y install gcc-c++

# 1. 卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
# 2. 需要的安装包
yum install -y yum-utils

# 3. 设置镜像的仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo # 默认的是国外的
    
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云    
    
# 4. 更新软件包索引
yum makecache fast

# 5. 安装docker  docker-ce 社区 -ee企业
yum install docker-ce docker-ce-cli containerd.io

# 6. 启动docke
systemctl start docker

# 7. 检查是否安装成功
docker version

# 8. hello-world (demo)
docker run hello-world

# 9. 查看镜像
docker images

加速器

sudo mkdir -p /etc/docker

vim /etc/docker/daemon.json

{
"registry-mirrors": [
"镜像源地址"
],
"dns": ["8.8.8.8","8.8.4.4"]
}

# 重启生效
sudo systemctl daemon-reload
sudo systemctl restart docker

镜像源地址推荐:

  • 清华大学:https://mirrors.tuna.tsinghua.edu.cn/
  • 阿里镜像:阿里镜像需要登录阿里云控制台获取,每个账号有唯一镜像加速地址。在控制台—>镜像容器服务---->镜像中心:镜像加速服务 下获取。

卸载

# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

# 2. 删除资源
rm -rf /var/lib/docker

常用命令

image

帮助命令

docker verison       # 显示docker版本信息
docker info          # 显示docker系统信息(包括镜像和容器的数量)
docker 命令 --help   # 万能提示
docker stats         # 查看资源使用情况

镜像命令

docker images  # 查看所有本地的主机上的镜像

docker search  # 搜索镜像

docker rmi     # 删除镜像

docker pull[:tag] 下载镜像

docker pull mysql

Using default tag: latest # 如果不写默认最新
latest: Pulling from library/mysql 
bb79b6b2107f: Pull complete # 分层下载,docker image的核心 联合文件系统
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d #签名
Status: Downloaded newer image for mysql:latest 
docker.io/library/mysql:latest #真实地址
commit镜像
# 提交容器成为一个新的
docker commit -m="提交的信息" -a="作者" 容器ID 目标镜像名:[TAG]

容器命令

说明:我们有了镜像才可以创建容器。 下面下载一个centos来学习

# 下载centos镜像
docker pull centos
新建容器并启动
docker run [可选参数] image

# 参数说明
--name="name"   容器名字,用来区分容器
-d              后台交互方式
-it             使用交互方式运行,进入容器查看内容
-p              指定容器端口
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口(常用)
    -p 容器端口
-P              随机指定端口

# 测试、启动进入容器
docker run -it centos /bin/bash

# 退出
exit
退出容器
exit # 直接推出容器
Ctrl + P + Q # 容器不停止推出
列出所有运行的容器
docker ps 
            # 列出当前正在运行的容器
    -a      # 列出当前正在运行的容器以及历史记录
    -n=?    # 显示最近创建的容器
    -q      # 只显示容器编号

# 根据镜像过滤
docker ps --filter ancestor=nginx
删除容器
docker rm 容器ID              # 不能删除正在运行的容器
          -f                  # 可以删除正在运行的容器
docker rm -f $(docker ps -aq) # 删除所有容器
启动和停止
docker start 容器ID     # 启动
       restart 容器ID   # 重启
       stop 容器ID      # 停止当前正在运行的容器
       kill 容器ID      # 强制停止当前正在运行的容器

其他常用命令

后台启动容器
# 命令
docker run -d 镜像名

# 问题
docker ps 发现centos停止了
常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
日志
docker logs -f -t --tail 10 容器ID

# 造数据测日志
docker run -d centos /bin/sh -c "while true;do echo CSP YES;sleep 1;done"
进程信息
docker top 容器ID
元数据
docker inspect 容器ID
进入当前正在运行的容器
# 通常容器都是使用后台的方式运行的,需要进入容器,修改一些配置

# 命令
dokcer exec -it 容器ID baseShell
docker attach 容器ID

# 区别
docker exec    # 进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach  # 进入容器正在执行的终端,不会启动新的进程!
从容器复制到主机
docker cp 容器ID:容器内路径 需要拷贝到的主机路径

可视化

  • portainer(简单)
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /opt/docker/portainer:/data --name portainer --restart=always portainer/portainer
  • Rancher(CI/CD)

容器数据卷

容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地!将容器内的目录,挂载到宿主机(容器间也可以数据共享)。实现容器的持久化!

直接使用命令挂载 -v

docker run -it -v 主机目录:容器目录

匿名和具名挂载

所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxx/_da

# 匿名 直接指定容器目录
docker run -v /ect/nginx nginx

# 具名 xxx为挂载取得名字
docker run -v xxx:/ect/nginx nginx

拓展

ro readonly   # 只读
rw readwrite  # 可读可写

docker run -v xxx:/ect/nginx:ro nginx
docker run -v xxx:/ect/nginx:rw nginx

Dockerfile

docekrfile是用来构建dockers镜像的文件,命令参数脚本。

构建步骤

  1. 编写一个dockerfile文件
  2. docker buile构建为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像
# 官方推荐dockerfile文件名:Dockerfile
docker buile -f dockerfile文件 -t 镜像名:[tag]

Dockerfile构建过程

基础知识:

  1. 每个保留关键字(指令)都必须是大写字母
  2. 执行顺序从上到下
  3. #表示注释
  4. 每一个指令都会创建提交一个新的镜像层

Dockerfile的指令

image

MAINTAINER    # 镜像作者 如:Strive<732171109@qq.com>
ADD           # 往镜像中添加内容,如:ADD centos-8-x86_64.tar.xz /
CMD           # 指定容器启动的时候要运行的命令,只有最后一个命令有效
ENTRYPOINT    # 指定容器启动的时候要运行的命令,可以追加命令
ONBUILD       # 构建一个被继承dockerfile,就会运行ONBUILD的指令(触发命令)

Dockerfile示例

构建一个centos

# 1. 编写dockerfile文件

FROM centos
MAINTAINER Strive<732171109@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "=====csp first dockerfile exec end====="
CMD /bin/bash

# 2. 构建
docker build -f dockerfile-csp-centos -t csp-centos:1.0 .

dockerfiel 工作图

image

Docker网络

# docker network
docker network inspect network_id

每启动一个docker容器,docker就会给docker容器分配一个IP,只要安装了docker,就会有一个网卡:docker0(桥接模式),使用的技术是veth-pair

veth-pair是一对虚拟设备接口,成对出现,一段连着协议,一段彼此相连。正因为这个特性,veth-pair充当了一座桥梁,连接各种虚拟网络设备

Docker中的所有网络接口都是虚拟的,虚拟转发效率高(内网传递)!只要容器删除,对应的网桥就没了。

link(不推荐)

docker run -d -P --name 容器名 --link 链接容器名 镜像

自定义网络(容器互联)

网络模式

  • bridge : 桥接(docker默认)
docker run -d -P --name csp-tomcat tomcat
docker run -d -P --name csp-tomcat --net bridge tomcat
  • none : 不配置网络
  • host : 与宿主机共享网络
  • container : 容器网络连通(不推荐)

测试

docker network create --driver bridge --subnet 192.168.0.0/16 --geteway 192.168.0.1 csp-net

docker run -d -P --name csp-tomcat-01 --net csp-net tomcat
docker run -d -P --name csp-tomcat-02 --net csp-net tomcat

docker exec -it csp-tomcat-01 ping csp-tomcat-02

网络连通

# docker network connect 网络名 容器名
docker network connect bridge csp-tomcat-02
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Strive_MY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值