文章目录
加载目录中...

docker容器学习(1)

管理员 2025-09-05 23:58 33 阅读 linux

docker容器学习(1)

1初识docker容器

  • 在开发软件的过程中经常需要遇到研发环境,测试环境,生产环境不一致导致,需要一个跨平台可移植的环境用以完成软件开发,这个跨平台可移植的环境称为docker。

图 1

  • docker用以解决软件跨环境迁移的问题
  • go语言编写,诞生于2013年,使用沙箱机制,容器性能开销低
  • 可以在linux,macos,windows系统上运行

2安装docker容器

以系统centos为例,安装过程如下

# 1 更新yum包
yum update
# 2 安装需要的软件包 yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3 设置安装源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4 安装docker 出现的询问全部选择同意
yum install -y docker-ce
# 5查看 docker的版本,验证是否安装成功
docker -v

windows安装过程如下

暂无

3docker架构

图 3

  • 客户端运行docker以后,相当于在客户端开了一个虚拟主机,可以在docker里面安装系统,软件等。
  • docker具有镜像(image)和容器的概念。镜像是静态的,属于类的概念,根据镜像可以创建对应的容器(对象),容器是动态的。
  • 镜像可以是文件系统,软件等
  • 容器可以被创建,启动,停止,删除,暂停等。
  • 仓库用于远程存储镜像文件的,可以从远程仓库拉取(pull)镜像使用
  • 配置镜像加速器,相当于从国内的镜像源下载镜像,速度会快很多。以阿里云为例,登录阿里云,打开控制台,搜索镜像加速,按照提示的命令来完成。

4docker命令

  • 在宿主机器内启动dockersystemctl start docker
  • 停止dockersystemctl stop docker
  • 重启dockersystemctl restart docker
  • 查看docker服务状态systemctl status docker
  • 开机启动docker服务systemctl enable docker

5docker镜像相关的命令

  • 查看本地镜像docker images
  • 搜索镜像docker search mysql
  • 拉取镜像docker pull mysql:5.6拉取docker的5.6版本。查看软件的版本,需要去docker hub官网上查找。
  • 删除镜像docker rmi IMAGE_ID,通过镜像的ID删除镜像或者通过镜像的版本号删除镜像docker rmi mysql:5.6冒号后面跟版本号
  • 查看所有的镜像IDdocker images -q,返回所有镜像的列表
  • 如果想要删除所有的镜像,可以执行以下命令
  •  docker rmi docker images -q 

6docker容器相关命令

  • 容器是镜像的实例,是动态的,以下是相关命令。
  • 查看容器。docker ps,查看所有的容器docker ps -a
  • 创建容器。有两个命令docker -it --name=C1 centos:7 /bin/bash。参数-i,以交互的模式运行容器,保证可以往容器里面输入内容,-t为容器创建一个w伪终端。以-it创建的容器退出就停止容器。--name=指明容器的名称。/bin/bash容器启动以后执行这个命令。docker -id --name=C2 centos:7 /bin/bash。参数-id在后台创建容器不进入容器(守护式容器)。退出不会停止容器。
  • 进入容器。docker exec -it C2 /bin/bash
  • 退出容器。exit
  • 启动容器。docker start C2
  • 停止容器。docker stop C2
  • 删除容器。docker rm C1。查看所有的容器IDdocker ps -aq。删除所有的容器。
     docker rm docker ps -aq 
  • 查看容器信息。docker inspect C2

7容器的数据卷

  • 数据卷的概念和作用。数据卷是为了容器删除以后,保证容器产生的数据依旧存在而设置的。外部客户端可以通过数据卷与容器进行数据交换。容器之间数据交换也是通过数据卷。数据卷是宿主机上的一个目录或文件(也可以理解为快捷方式或者软连接)。当容器目录和数据卷绑定以后,修改会同步。

图 4

  • 配置数据卷。创建容器时指定数据卷docker -it -v 宿主机目录(文件):容器内目录(文件) --name=C3 centos:7 /bin/bash。参数-v绑定主机内的目录到容器内,这样两者的修改就会同步。注意路径必须是绝对路径。同一个目录可以被多个容器绑定。

图 5

  • 配置数据卷容器。当挂载的数据卷越多,数据卷管理就会混乱,这是需要一个数据卷容器帮助管理数据卷。

图 6

  • 如上图所示,首先将容器C3和数据卷绑定docker run -it --name=C1 -v volume centos:7 /bin/bash,之后再创建C1,C2绑定容器C3,这样三者共绑定一个数据卷。命令如下docker run -it --name=C1 --volumes-from C3 centos:7 /bin/bashdocker run -it --name=C2 --volumes-from C3 centos:7 /bin/bash。设置数据卷容器,宿主机会自动设置一个目录存放数据卷。

8docker应用部署

docker应用部署一般可以分为以下部分。1搜索应用镜像2拉取应用镜像3创建容器4操作镜像容器,下面是四个常用的例子。 - 部署mysql

图 7

外部机器不能直接和容器进行通信,需要先通过宿主机器的端口,然后转发到容器的监听端口。这种称为端口映射

  # 搜索mysql镜像
  docker search mysql
  # 拉取mysql镜像
  docker pull mysql:5.6
  # 创建一个文件夹,用于存储mysql信息,并且进入 
  mkdir ~/mysql
  cd ~/mysql
  # 创建容器,设置端口映射
  docker run -id \   # 后台创建容器
  --name=c_mysql     # 设置容器的名称
  -p 3307:3306 \     # 设置端口映射
  -v $PWD/conf:/etc/mysql/conf.d \ # 设置数据卷  宿主机使用绝对路径 配置目录
  -v $PWD/logs:/logs \    # 日志目录
  -v $PWD/data:/var/libs/mysql\ # 数据目录
  -e MYSQL_ROOT_PASSWORD=123456 \ # 设置root账户的登录密码
  mysql:5.6
  # 创建完容器,进入容器,使用mysql语句就可以对容器进行操作
  • 部署tomcat
  docker search tomcat
  docker pull tomcat
  mkdir ~/tomcat
  cd ~/tomcat
  docker run -id \
  --name=c_tomcat \
  -p 8080:8080 \
  -v $PWD:/usr/local/tomcat/webapps \ 
  tomcat
  • 部署nginx 反向代理
  user nginx;
  worker_processes 1;
  error_1og    /var/1og/nginx/error.log warn;
  pid         /var/run/nginx.pid;
  events {
       worker connections   1024;
  }     
  http {
        include     /etc/nginx/mime.types;
        default_type   application/octet-stream;
        log_format  main  '$remote_addr - $remote_user [$time_local]"Sreguest" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        access_1og  /var/log/nginx/access.1og main;
        sendfi]e  on;
        # tcp_nopush on;
        keepalive_timeout 65:
        # gzip on;
        include /etc/nginx/conf.d/*.conf;
    }
  docker search nginx
  docker pull nginx
  mkdir ~/nginx
  cd ~/nginx   # 需要新建一个配置文件
  vim nginx.conf  # 将上面的文件放入 nginx.conf
  docker run -id --name=c_nginx \
  -p 80:80 \
  -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \  # 配置目录
  -v $PWD/logs:/var/log/nginx \                    # 日志目录
  -v $PWD/html:/usr/share/nginx/html \             # 访问的文件夹
  nginx

 ```

  - 部署redis

```bash
  docker search redis
  docker pull redis:5.0
  dicker run -id \
  --name=c_redis \
  -p 6379:6379 \
  redis:5.0

外部机器连接redis,在当前目录下 redis-cli.exe -h ip地址 -p 6379

9镜像原理

图 8

docker的本质是一个分层文件系统,cenos镜像小是因为复用了操作系统的bootfs,只暴露出rootfs和其他镜像。tomcat镜像存储大,是因为存储包含了需要依赖的父镜像和基础镜像。

10将容器转换为镜像

图 9

镜像的压缩文件可以在不同容器之间进行传播,通过拉取旧镜像创建一个容器,在转换为一个镜像就可以在不同容器之间进行传播。相关命令如下

  docker commit 容器id 镜像名称:版本号
  docker save -o 压缩文件名称 镜像名称:版本号
  docker load -i 压缩文件名称

11初识dockerfile

  • docker是一个文本文件,包含了一条条指令,通过这些指令可以构建出一个新的镜像
  • 可以认为dockerfile提供了一个完全一直的开发环境。
  • dockerhub查看相关命令。不用专门去学相关命令,遇到了再去查找相关资料。

12dockerfile部署springboot项目

打包springboot项目为jar文件,可以运行java -jar 路径\xxx.jar文件
dockerfile构建镜像命令docker build -f dockerfile文件路径 -t 镜像名称:镜像版本,dockerfile的文件内容如下:

  # 1 定义父镜像
  # 2 定义作者信息
  # 3 将jar包添加到容器
  # 4 定义容器启动执行的命令
  # 5 通过dockefile构建进行
  FROM java:8                       # 需要的基础镜像
  MAINTAINER wayne<wayne@163.com>   # 作者信息
  ADD springboot_name.jar  new_name_app.jar  # 需要添加的文件
  CMD java -jar new_name_app.jar  # 容器启动以后 运行的命令

13dockerfile自定义centos

  • 要求登录以后自动进入/usr文件夹
  • 要求进入以后可以使用vim编辑器 dockerfile文件内容如下:
  FROM centos:7
  MAINTAINER wayne<wayne@163.com>
  RUN yum install -y vim     # 运行命令  含义:使用yum安装vim工具
  WORKDIR /usr               # 定义工作目录
  CMD /bin/bash              # 容器启动以后启动命令

14docker中compose的安装和使用

微服务架构的应用系统一般包括若干个微服务,每个微服务都会部署多个实例,维护的工作量很大,简而言之,可能需要创建很多个容器,并且需要手动停止。 docker compose服务编排是一个编排多容器分布式部署的工具,提供容器管理的完整开发周期,使用步骤如下: - 利用dockerfile提供环境依赖 - 使用docker-compose.yml定义组成的应用各个服务 - 运行docker-compose 启动应用 相关命令如下:

  # 1 安装 docker compose
  # 2 卸载 docker compose
  rm 安装路径/docker-compose
  # 3 使用docker compose 编排nginx+springboot项目
  # 创建 docker_compose文件夹并进入
  # 创建并编辑 docker-compose.yml

docker-compose.yml的内容如下:

  version: "3"
  5ervices:
      nginx:
          image: nginx
          ports:
              - 80:80
          links:
              - app
          volumes:
              - ./nginx/conf.d:/etc/nginx/conf.d
          app:
              image: app
              expose:
                  - "8080"

创建./nginx/conf.d,并编辑内容如下:

server {
    listen 80;
    access_log off;
    location  / {
    proxy_pass http://app:8080;
    }
}

最后在docker-compose.yml目录下,执行命令docker-compose up

15docker私有仓库

可以将自己制作的镜像放入到公网中,有时不想将自己的镜像放入到公网,可以将镜像推到自己的云服务器中。