springboot第26集:centos,docker

2023-10-08 18:34:52 浏览数 (1)

代码语言:javascript复制
yum -v
Loading "fastestmirror" plugin
Loading "langpacks" plugin
Loading "product-id" plugin
Loading "search-disabled-repos" plugin
Loading "subscription-manager" plugin
Adding en_US.UTF-8 to language list
Adding zh_CN.UTF-8 to language list
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Config time: 0.598
Yum version: 3.4.3
You need to give some command
Usage: yum [options] COMMAND

List of Commands:

check          Check for problems in the rpmdb
check-update   Check for available package updates
clean          Remove cached data
deplist        List a package's dependencies
distribution-synchronization Synchronize installed packages to the latest available versions
downgrade      downgrade a package
erase          Remove a package or packages from your system
fs             Acts on the filesystem data of the host, mainly for removing docs/lanuages for minimal hosts.
fssnapshot     Creates filesystem snapshots, or lists/deletes current snapshots.
groups         Display, or use, the groups information
help           Display a helpful usage message
history        Display, or use, the transaction history
info           Display details about a package or group of packages
install        Install a package or packages on your system
langavailable  Check available languages
langinfo       List languages information
langinstall    Install appropriate language packs for a language
langlist       List installed languages
langremove     Remove installed language packs for a language
list           List a package or groups of packages
load-transaction load a saved transaction from filename
makecache      Generate the metadata cache
provides       Find what package provides the given value
reinstall      reinstall a package
repo-pkgs      Treat a repo. as a group of packages, so we can install/remove all of them
repolist       Display the configured software repositories
search         Search package details for the given string
shell          Run an interactive yum shell
swap           Simple way to swap packages, instead of using shell
update         Update a package or packages on your system
update-minimal Works like upgrade, but goes to the 'newest' package match which fixes a problem that affects your system
updateinfo     Acts on repository update information
upgrade        Update packages taking obsoletes into account
version        Display a version for the machine and/or available repos.

Options:
-h, --help            show this help message and exit
-t, --tolerant        be tolerant of errors
-C, --cacheonly       run entirely from system cache, don't update cache
-c [config file], --config=[config file]
config file location
-R [minutes], --randomwait=[minutes]
maximum command wait time
-d [debug level], --debuglevel=[debug level]
debugging output level
--showduplicates      show duplicates, in repos, in list/search commands
-e [error level], --errorlevel=[error level]
error output level
--rpmverbosity=[debug level name]
debugging output level for rpm
-q, --quiet           quiet operation
-v, --verbose         verbose operation
-y, --assumeyes       answer yes for all questions
--assumeno            answer no for all questions
--version             show Yum version and exit
--installroot=[path]  set install root
--enablerepo=[repo]   enable one or more repositories (wildcards allowed)
--disablerepo=[repo]  disable one or more repositories (wildcards allowed)
-x [package], --exclude=[package]
exclude package(s) by name or glob
--disableexcludes=[repo]
disable exclude from main, for a repo or for
everything
--disableincludes=[repo]
disable includepkgs for a repo or for everything
--obsoletes           enable obsoletes processing during updates
--noplugins           disable Yum plugins
--nogpgcheck          disable gpg signature checking
--disableplugin=[plugin]
disable plugins by name
--enableplugin=[plugin]
enable plugins by name
--skip-broken         skip packages with depsolving problems
--color=COLOR         control whether color is used
--releasever=RELEASEVER
set value of $releasever in yum config and repo files
--downloadonly        don't update, just download
--downloaddir=DLDIR   specifies an alternate directory to store packages
--setopt=SETOPTS      set arbitrary config and repo options
--bugfix              Include bugfix relevant packages, in updates
--security            Include security relevant packages, in updates
--advisory=ADVS, --advisories=ADVS
Include packages needed to fix the given advisory, in
updates
--bzs=BZS             Include packages needed to fix the given BZ, in
updates
--cves=CVES           Include packages needed to fix the given CVE, in
updates
--sec-severity=SEVS, --secseverity=SEVS
Include security relevant packages matching the
severity, in updates

Plugin Options:

代码语言:javascript复制
uname -r
3.10.0-1127.19.1.el7.x86_64
代码语言:javascript复制
docker -v
Docker version 1.13.1, build /1.13.1

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:

代码语言:javascript复制
[root@xxx ~]# yum -y install docker

启动 Docker 后台服务

代码语言:javascript复制
[root@xxx ~]# service docker start

测试运行 hello-world

代码语言:javascript复制
[root@xxx ~]#docker run hello-world

由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。


使用脚本安装 Docker

1、使用 sudo 或 root 权限登录 Centos。

2、确保 yum 包更新到最新。

代码语言:javascript复制
$ sudo yum update

3、执行 Docker 安装脚本。

代码语言:javascript复制
$ curl -fsSL https://get.docker.com/ | sh

执行这个脚本会添加 docker.repo 源并安装 Docker。

4、启动 Docker 进程。

代码语言:javascript复制
$ sudo service docker start

5、验证 docker 是否安装成功并在容器中执行一个测试的镜像。

代码语言:javascript复制
$ sudo docker run hello-world

到此,docker 在 CentOS 系统的安装完成。

使用 Homebrew 安装

macOS 我们可以使用 Homebrew 来安装 Docker。

Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装:

代码语言:javascript复制
docker --version

Docker version 20.10.12, build

网易的镜像地址:http://hub-mirror.c.163.com

代码语言:javascript复制
{
  "registry-mirrors": [
    "https://q8w7dwkd.mirror.aliyuncs.com",
    "http://hub-mirror.c.163.com",
    "https://k396qenz.mirror.aliyuncs.com",
    "https://dockerhub.azk8s.cn",
    "https://hub-mirror.c.163.com"
  ],
  "debug": true,
  "experimental": true,
  "builder": {
    "gc": {
      "enabled": true,
      "defaultKeepStorage": "20GB"
    }
  }
}
  • docker:  Docker 的二进制执行文件。
  • run: 与前面的 docker 组合来运行一个容器。
  • ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  • /bin/echo "Hello world": 在启动的容器里执行的命令

我们需要确认容器有在运行,可以通过 docker ps 来查看

代码语言:javascript复制
@xxxx:~$ docker ps

停止容器

我们使用 docker stop 命令来停止容器:

通过docker ps查看,容器已经停止工作:

docker command --help 更深入的了解指定的 Docker 命令使用方法。

例如我们要查看 docker stats 指令的具体使用方法:

  • -d: 让容器在后台运行。
  • -P: 将容器内部使用的网络端口映射到我们使用的主机上。

docker还提供了另一个快捷方式:docker port,使用 docker port 可以查看指定 (ID或者名字)容器的某个确定端口映射到宿主机的端口号。

docker ps -l 来查看正在运行的容器

可以使用 docker images 来列出本地主机上的镜像。

  • REPOSTITORY: 表示镜像的仓库源
  • TAG: 镜像的标签
  • IMAGE ID: 镜像ID
  • CREATED: 镜像创建时间
  • SIZE: 镜像大小

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为:*https://hub.docker.com/*

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否docker官方发布

docker port 命令可以让我们快捷地查看端口的绑定情况。

nginx, php, mysql, tomcat, python, redis, mongodb, apache

image.png

代码语言:javascript复制
~/nginx$ docker ps

使用nginx镜像

命令说明:

  • -p 80:80: 将容器的80端口映射到主机的80端口
  • --name mynginx: 将容器命名为mynginx
  • -v $PWD/www:/www: 将主机中当前目录下的www挂载到容器的/www
  • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf: 将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf
  • -v $PWD/logs:/wwwlogs: 将主机中当前目录下的logs挂载到容器的/wwwlogs
docker pull nginx

查找Docker Hub上的nginx镜像

代码语言:javascript复制
~/nginx$ docker run -p 80:80 --name mynginx -v $PWD/www:/www -v
docker pull php

查找Docker Hub上的php镜像

代码语言:javascript复制
docker run -p 9000:9000 --name  myphp-fpm -v ~/nginx/www:/www -v
  • -p 9000:9000 :将容器的9000端口映射到主机的9000端口
  • --name myphp-fpm :将容器命名为myphp-fpm
  • -v ~/nginx/www:/www :将主机中项目的目录www挂载到容器的/www
  • -v $PWD/conf:/usr/local/etc/php :将主机中当前目录下的conf目录挂载到容器的/usr/local/etc/php
  • -v $PWD/logs:/phplogs :将主机中当前目录下的logs目录挂载到容器的/phplogs

通过nginx php实现web服务,nginx配置文件的fastcgi_pass应该配置为myphp-fpm容器的IP。

代码语言:javascript复制
fastcgi_pass  172.17.0.4:9000;

容器IP的查方法

代码语言:javascript复制
docker inspect 容器ID或容器名 |grep '"IPAddress"'
代码语言:javascript复制
nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /www/server/nginx/conf/nginx.conf test is successful
代码语言:javascript复制
# ps aux | grep nginx
查看[nginx]服务路径
代码语言:javascript复制
ps aux|grep nginx

确定正在运行的 Nginx 容器的名称或 ID。您可以使用以下命令列出当前正在运行的容器:docker ps

进入正在运行的 Nginx 容器。使用以下命令进入容器的 shell:docker exec -it <container_name_or_id> bash

在容器的 shell 中,您可以查看 Nginx 的配置文件。默认情况下,Nginx 的配置文件位于 /etc/nginx 目录下。

查看 Nginx 的主配置文件。主配置文件通常名为 nginx.conf,您可以使用文本编辑器(如 vinano)查看其内容。

退出容器。在完成查看配置文件的操作后,使用 exit 命令退出容器的 shell。

  • -p 80:80: 将容器的80端口映射到主机的80端口
  • --name mynginx: 将容器命名为mynginx
  • -v $PWD/www:/www: 将主机中当前目录下的www挂载到容器的/www
  • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf: 将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf
  • -v $PWD/logs:/wwwlogs: 将主机中当前目录下的logs挂载到容器的/wwwlogs
docker pull mysql

查找Docker Hub上的mysql镜像

docker pull tomcat

-p 8080:8080: 将容器的8080端口映射到主机的8080端口

-v $PWD/test:/usr/local/tomcat/webapps/test: 将主机中当前目录下的test挂载到容器的/test

代码语言:javascript复制
docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat
dd6469eaabbcd8644ab5c43ff7dc60f114874bb27b8db49f8e9ff89040914d5b
代码语言:javascript复制
docker run -p 3306:3306 --name mymysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
21cb89213c93d805c5bacf1028a0da7b5c5852761ba81327e6b99bb3ea89930e
代码语言:javascript复制
docker run -p 6379:6379 -v $PWD/data:/data  -d redis:3.2 redis-server --appendonly yes
43f7a65ec7f8bd64eb1c5d82bc4fb60e5eb31915979c4e7821759aac3b62f330

命令说明:

-p 6379:6379 : 将容器的6379端口映射到主机的6379端口

-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data

redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置

代码语言:javascript复制
docker run -p 27017:27017 -v $PWD/db:/data/db -d mongo:3.2
cda8830cad5fe35e9c4aed037bbd5434b69b19bf2075c8626911e6ebb08cad51

命令说明:

-p 27017:27017 : 将容器的27017 端口映射到主机的27017 端口

-v $PWD/db:/data/db : 将主机中当前目录下的db挂载到容器的/data/db,作为mongo数据存储目录

docker pull httpd

查找Docker Hub上的httpd镜像

docker run

代码语言:javascript复制
# 运行一个容器
docker run -it -p 8088:8088 -p 8089:8089 -p 8090:9090 -v /root/soft/docker:/root/soft/docker -v /root/soft/dockertt:/root/soft/dockertt loen/rc /bin/bash

命令的格式:
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-a, --attach=[] 登录容器(以docker run -d启动的容器)
-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
--cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
-d, --detach=false 指定容器运行于前台还是后台
--device=[] 添加主机设备给容器,相当于设备直通
--dns=[] 指定容器的dns服务器
--dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
-e, --env=[] 指定环境变量,容器中可以使用该环境变量
--entrypoint="" 覆盖image的入口点
--env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
--expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
-h, --hostname="" 指定容器的主机名
-i, --interactive=false 打开STDIN,用于控制台交互
--link=[] 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
-m, --memory="" 指定容器的内存上限
--name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge" 容器网络设置,待详述
-P, --publish-all=false 指定容器暴露的端口,待详述
-p, --publish=[] 指定容器暴露的端口,待详述
--privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="" 指定容器停止后的重启策略,待详述
--rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
-t, --tty=false 分配tty设备,该可以支持终端登录
-u, --user="" 指定容器的用户
-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
-w, --workdir="" 指定容器的工作目录

>>>>>> 详细讲解
端口暴露
-P参数:docker自动映射暴露端口;

docker run -d -P training/webapp <span style="color:#009900;">//docker自动在host上打开49000到49900的端口,映射到容器(由镜像指定,或者--expose参数指定)的暴露端口;</span>
-p参数:指定端口或IP进行映射;

docker run -d -p 5000:80 training/webapp <span style="color:#009900;">//host上5000号端口,映射到容器暴露的80端口;</span>
docker run -d -p 127.0.0.1:5000:80 training/webapp <span style="color:#009900;">//host上127.0.0.1:5000号端口,映射到容器暴露的80端口;</span>
docker run -d -p 127.0.0.1::5000 training/webapp <span style="color:#009900;">//host上127.0.0.1:随机端口,映射到容器暴露的80端口;</span>
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp <span style="color:#009900;">//绑定udp端口;</span>

网络配置

--net=bridge:<span style="color:#009900;">//使用docker daemon指定的网桥</span>
--net=host:<span style="color:#009900;">//容器使用主机的网络</span>
--net=container:NAME_or_ID:<span style="color:#009900;">//使用其他容器的网路,共享IP和PORT等网络资源</span>
--net=none:<span style="color:#009900;">//容器使用自己的网络(类似--net=bridge),但是不进行配置</span>

docker stop

代码语言:javascript复制
# 关闭运行中的容器
docker stop 容器ID

docker start

代码语言:javascript复制
# 启动一个已经停止的容器
docker start 容器ID

# 重启一个容器
docker restart 容器ID

docker attach

代码语言:javascript复制
# 进入一个运行中的容器
docker attach 容器ID

docker ps

代码语言:javascript复制
# 显示全部容器
docker ps -a

# 显示当前运行的容器
docker ps

docker images

代码语言:javascript复制
# 查看本地镜像
docker images

docker rmi

代码语言:javascript复制
# 删除所有镜像
docker rmi $(docker images | grep -v RESPOSITORY | awk '{print $3}')

docker build

代码语言:javascript复制
# 构建容器
docker build -t 镜像名称 .     # 后面的. 指的是当前文件夹 (其实是Dockerfile存放的文件夹)

# 建立映像文件。–rm 选项是告诉Docker,在构建完成后删除临时的Container,Dockerfile的每一行指令都会创建一个临时的Container,一般这些临时生成的Container是不需要的
docker build --rm=true -t loen/lamp .

docker rm

代码语言:javascript复制
# 删除容器
docker rm 容器ID

# 删除所有容器
docker rm $(docker ps -a)

docker history

代码语言:javascript复制
# 查看历史
docker history 镜像ID

docker export

代码语言:javascript复制
# 导出容器
docker export 容器ID > xxx.tar

docker save

代码语言:javascript复制
# 把 mynewimage 镜像保存成 tar 文件
docker save myimage | bzip2 -9 -c> /home/save.tar.bz2

docker load

代码语言:javascript复制
# 加载 myimage 镜像
bzip2 -d -c < /home/save.tar.bz2 | docker load
代码语言:javascript复制
$ docker run -it -p 8001:8080 --name my-nginx nginx

  • -it - 交互式 bash 模式
  • -p 8001:8080 - 将端口 8001 映射到容器中的端口 8080
  • --name my-nginx - 指定名称
  • nginx - 要使用的图像
代码语言:javascript复制
docker run -d -p 80:80 -p 443:443 --name nginx --restart=always -e TZ="Asia/Shanghai" -v /root/nginx/html:/usr/share/nginx/html:ro -v /root/nginx/conf/nginx:/etc/nginx/:ro -v /root/nginx/log:/var/log/nginx nginx

Docker 方式安装 MySQL8.0

代码语言:javascript复制
docker run -itd --name mysql8.0 --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

导入 SQL 脚本文件到 MySQL 容器

代码语言:javascript复制
docker cp _data.sql mysql8.0:/tmp/

登入到 MySQL 容器内的 MySQL 服务

代码语言:javascript复制
docker exec -it mysql8.0 mysql -uroot -p123456
代码语言:javascript复制
create database xxx default character set utf8mb4;
use xxx;
代码语言:javascript复制
source /tmp/xxx_struc.sql

Docker 方式安装最新版 Redis

代码语言:javascript复制
docker run -d --name redis8.0 --restart=always -p 6379:6379 redis --requirepass "123456"

启动一个最新版 Nginx 的 Docker 临时容器

代码语言:javascript复制
docker run -d --name nginx nginx

前端网站部署

  1. 下载前端项目源码
  2. 修改 .env.production 中的生产环境配置
  3. 项目根目录下运行 yarn build 命令构建
  4. 上传dist文件夹中的内容到到服务器/root/nginx/html目录中

Nginx 安装和配置

  1. 启动一个最新版 Nginx 的 Docker 临时容器
代码语言:javascript复制
docker run -d --name nginx nginx

其中,Nginx 运行在 Docker 容器中对应的目录如下:

  • 配置文件目录:/etc/nginx
  • 日志目录:/var/log/nginx
  • 项目根目录:/usr/share/nginx/html
  1. 复制 Nginx 的配置文件到宿主机中
代码语言:javascript复制
mkdir nginx
cd nginx
mkdir conf
cd conf
docker cp nginx:/etc/nginx ./
cd ..
mkdir html
mkdir log
  1. 配置后端服务的反向代理
代码语言:javascript复制
vim conf/nginx/conf.d/xxx.conf
  1. 停止之前启动的临时容器,并删除
代码语言:javascript复制
docker stop nginx
docker rm nginx
  1. 启动新的 Nginx 容器
代码语言:javascript复制
docker run -d -p 80:80 -p 443:443 --name nginx --restart=always -e TZ="Asia/Shanghai" -v /root/nginx/html:/usr/share/nginx/html:ro -v /root/nginx/conf/nginx:/etc/nginx/:ro -v /root/nginx/log:/var/log/nginx nginx

其中,

  • :ro:表示容器内部的 nginx 文件是只读的,想要修改配置内容,只能修改宿主机的 conf 文件夹。这样带来的好处是安全性更高
  • -e TZ="Asia/Shanghai":表示把时区设置为中国的时区

仓库地址:https://github.com/webVueBlog/JavaGuideInterview

0 人点赞