Docker容器

一.什么是Docker容器

Docker容器是一个开源的容器化管理平台,它允许开发者将应用程序以及所有依赖项打包到一个标准化的单元中,称为容器,每个容器都支持独立运行。

二.Docker的核心概念

1、仓库 (Repository)

仓库是存放镜像的地址,类似于代码管理平台(GitHub)上的仓库,DockerHub是Docker官方提供的镜像仓库,开发者也可以搭建自己的仓库

2、镜像 (Images)

镜像是容器的模板,用来构建容器,相当于java中的.class文件,它包含了应用程序及所有依赖项,以及运行时所需的环境配置。

3、容器 (Container)

容器是Docker的运行实例,它是从镜像中创建的。每个容器都运在独立的命名空间中,与其它容器互相隔离

三.安装步骤

官方文档 Install Docker Engine on CentOS | Docker Docs

以下均已按照官方文档方式安装 如有不对还将查看官方文档

1.卸载旧版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

yum可能会报告您没有安装任何这些软件包。

存储在其中的映像、容器、卷和网络不是 卸载 Docker 时自动删除。/var/lib/docker/

2.设置存储库

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.安装 Docker 引擎 最新

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

如果系统提示您接受 GPG 密钥,请验证指纹是否匹配,如果匹配,请接受它。060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35

此命令安装 Docker,但不会启动 Docker。它还会创建一个组,但是,默认情况下它不会向组添加任何用户。docker

4.启动 Docker

sudo systemctl start docker

5.通过运行映像来验证 Docker 引擎安装是否成功。hello-world

sudo docker run hello-world

此命令下载测试映像并在容器中运行它。当 容器运行,它打印确认消息并退出。

6.配置容器加速

容器镜像服务_镜像构建_镜像授权_镜像托管-阿里云 (aliyun.com)

  1. 点击链接

  2. 点击管理控制台

    image-20240517174232868
  3. 复制镜像加速配置
    image-20240517174232868

四.命令

  • docker version : docker客户端和服务端的信息版本

  • docker info : docker系统及信息,容器,镜像和驱动信息

  • docker search 镜像名 : 搜索可用镜像

  • docker pull 镜像名:标签 : 下载对应的镜像,标签也就是版本

  • docker images : 查看本地有哪些镜像

  • docker rmi 镜像ID或镜像名称 : 删除镜像

  • docker rm 容器ID或容器名 : 删除容器

  • docker run 镜像名称 : 标签 :把一个镜像变成容器并启动 还可以设置配置

    docker run -d --name myname -it openjdk:8
    

    -p 设置端口映射 (如-p 6400:6379 宿主机的6400端口映射到容器的6379端口)

    -d 后台运行

    --name 名字

    -it 交互式运行(分配黑屏模式)

    -v 挂载路径 (可以挂载路径,也可以挂载文件)

  • docker ps -a : 查看所有容器 (包括已停止的)

  • docker rm 容器ID或容器名称 : 删除容器

  • docker start 容器ID或容器名称 : 启动容器

  • docker stop 容器ID或容器名称 : 停止容器

  • docker logs 容器ID或容器名称 : 查看容器日志

  • docker exec -it容器ID或容器名称 /bin/bash : 进入容器 exit退出容器

  • docker cp :

    docker cp 容器id或容器名称 :容器内路径/文件名 宿主机路径 把容器内文件复制到宿主机

    docker cp 宿主机路径 容器id或容器名称 :容器内路径/文件名 把宿主机文件复制到指定容器内

    如:

    docker cp nginx:/etc/nginx/nginx.conf /root  #把nginx容器内的nignx.conf文件复制到宿主机的/root目录下
    docker cp /root/aaa/xxgc.jar myjava:/root/jar #把宿主机的/root/aaa/xxgc.jar包复制到 myjava容器下面的/root/jar路径下面
    

软件中的一些特性

1、redis安装设置密码

#示例命令
docker run -d -it --name redis --requirepass "你的密码" -p 6379:6379 redis

# 安装redis时设置密码

--requirepass  "你的密码"

# 如果已经安装完成,需要进入容器,然后进入cli

config set requirepass "你的密码"

2、安装mysql5.7

# 示例命令
docker run -d -it --name mysql57 -e MYSQL_ROOT_PASSWORD=<你的密码> -v /my/own/datadir:/var/lib/mysql -p 3306:3306 mysql:5.7

-v 挂载  宿主机路径:容器内路径

3、安装Nginx

# 示例命令
# 步骤1 启动一个不需要挂载的nginx
docker run --name nginx -d -p 80:80 -p 443:443 nginx

# 步骤2 把容器内需要挂载的文件 从容器内复制出来
docker cp nginx:/etc/nginx/nginx.conf /root/nginx

# 步骤3 修改nginx.conf的内容
# 注释这个
# # include /etc/nginx/conf.d/*.conf;
# 添加自己的配置


# 步骤4 停止并删除容器

# 步骤5 启动容器时挂载nginx.conf文件
docker run --name nginx -d -p 80:80 -p 443:443 -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf nginx

# 注意 nginx下面conf.d的目录,这个目录是可以将nginx的配置以模块的形式存放,并加载
# 这样每个项目都可以有一个单独的nginx配置文件

5.注意

  1. Docker宿主机和容器之间所有端口都是隔离的,但是可以做端口映射

6.优秀的开源镜像

1.next-cloud网盘

  1. 安装MYSQL数据库
  2. 安装 next cloud
docker run -d --name=nextcloud --link 数据库镜像名:数据库库名 -v ~/docker/nextcloud:/var/www/html/ -p 8080:80 --restart=always nextcloud:21
  1. 在容器外使用docker inspect nextcloud

记住 IPAddress

image-20240517174232868
  1. 修改 ServerName IPAddress

    1. 进入容器

      docker exec -it nextcloud /bin/bash
      
    2. 安装sudo工具

      apt-get update
      apt-get install sudo
      
    3. 安装Vim

      sudo apt-get install vim
      
    4. 修改nextcloud配置

      vim /etc/apache2/sites-enabled/000-default.conf
      

      ​ 如下图所示:

      image-20240517174232868 保存并退出 => 退出容器
    5. 重启容器

    6. 注册配置

      image-20240517174232868

2.Draw-io 画图工具

# 创建 Draw.io 数据存放目录
mkdir /docker/Drawio -p && cd /docker/Drawio

# 使用 Docker-Cli 运行 Drawio 容器
docker run -dit --name=drawio -p 9090:8080 \
-v drawiojs:/usr/local/tomcat/webapps/draw/js/ \
--restart=always jgraph/drawio

3.portainer 可视化容器管理

码头集装箱起重机

docker run -d -p 8000:8000 -p 9000:9000 --name portainer-zh --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /docker_data/portainer/data:/data \
-v /etc/localtime:/etc/localtime \
liuximeng520/portainer-zh:2.19.0
docker run -d \
--name=portainer-zh \
-p 9100:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=always \
6053537/portainer-ce

4. WordPress博客

WORDPRESS_DB_HOST 数据库地址

WORDPRESS_DB_USER 数据库用户名

WORDPRESS_DB_PASSWORD 密码

WORDPRESS_DB_NAME 数据库名

docker run -d --name my_wordpress --restart always \
-e WORDPRESS_DB_HOST=192.168.3.166:3306 \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=redhat \
-e WORDPRESS_DB_NAME=blog \
-p 8167:80  wordpress:php7.3

5. YesPlayMusic音乐播放器

docker run -d \
--name yesplaymusic  \
--restart always    \
-p 7950:80   \
fogforest/yesplaymusic

6. Jeffyfin流媒体系统

docker run -d \
  --name=jellyfin \
  --user=1000:1000 \
  --net=host \
  -v /path/to/config:/config \
  -v /path/to/cache:/cache \
  -v /path/to/media:/media \
  jellyfin/jellyfin