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:
uname -r
3.10.0-1127.19.1.el7.x86_64
docker -v
Docker version 1.13.1, build /1.13.1
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:
[root@xxx ~]# yum -y install docker
启动 Docker 后台服务
[root@xxx ~]# service docker start
测试运行 hello-world
[root@xxx ~]#docker run hello-world
由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。
1、使用 sudo
或 root
权限登录 Centos。
2、确保 yum 包更新到最新。
$ sudo yum update
3、执行 Docker 安装脚本。
$ curl -fsSL https://get.docker.com/ | sh
执行这个脚本会添加 docker.repo
源并安装 Docker。
4、启动 Docker 进程。
$ sudo service docker start
5、验证 docker
是否安装成功并在容器中执行一个测试的镜像。
$ sudo docker run hello-world
到此,docker 在 CentOS 系统的安装完成。
macOS 我们可以使用 Homebrew 来安装 Docker。
Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装:
docker --version
Docker version 20.10.12, build
网易的镜像地址:http://hub-mirror.c.163.com
。
{
"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 来查看
@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~/nginx$ docker ps
命令说明:
-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 Hub上的nginx镜像
~/nginx$ docker run -p 80:80 --name mynginx -v $PWD/www:/www -v
查找Docker Hub上的php镜像
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。
fastcgi_pass 172.17.0.4:9000;
容器IP的查方法
docker inspect 容器ID或容器名 |grep '"IPAddress"'
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
# ps aux | grep nginx
ps aux|grep nginx
确定正在运行的 Nginx 容器的名称或 ID。您可以使用以下命令列出当前正在运行的容器:docker ps
进入正在运行的 Nginx 容器。使用以下命令进入容器的 shell:docker exec -it
在容器的 shell 中,您可以查看 Nginx 的配置文件。默认情况下,Nginx 的配置文件位于 /etc/nginx
目录下。
查看 Nginx 的主配置文件。主配置文件通常名为 nginx.conf
,您可以使用文本编辑器(如 vi
或 nano
)查看其内容。
退出容器。在完成查看配置文件的操作后,使用 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 Hub上的mysql镜像
docker pull tomcat
-p 8080:8080: 将容器的8080端口映射到主机的8080端口
-v $PWD/test:/usr/local/tomcat/webapps/test: 将主机中当前目录下的test挂载到容器的/test
docker run --name tomcat -p 8080:8080 -v \$PWD/test:/usr/local/tomcat/webapps/test -d tomcat\
dd6469eaabbcd8644ab5c43ff7dc60f114874bb27b8db49f8e9ff89040914d5b
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
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持久化配置
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 Hub上的httpd镜像
# 运行一个容器
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 //docker自动在host上打开49000到49900的端口,映射到容器(由镜像指定,或者--expose参数指定)的暴露端口;
-p参数:指定端口或IP进行映射;
docker run -d -p 5000:80 training/webapp //host上5000号端口,映射到容器暴露的80端口;
docker run -d -p 127.0.0.1:5000:80 training/webapp //host上127.0.0.1:5000号端口,映射到容器暴露的80端口;
docker run -d -p 127.0.0.1::5000 training/webapp //host上127.0.0.1:随机端口,映射到容器暴露的80端口;
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp //绑定udp端口;
网络配置
--net=bridge://使用docker daemon指定的网桥
--net=host://容器使用主机的网络
--net=container:NAME_or_ID://使用其他容器的网路,共享IP和PORT等网络资源
--net=none://容器使用自己的网络(类似--net=bridge),但是不进行配置
# 关闭运行中的容器
docker stop 容器ID
# 启动一个已经停止的容器
docker start 容器ID
# 重启一个容器
docker restart 容器ID
# 进入一个运行中的容器
docker attach 容器ID
# 显示全部容器
docker ps -a
# 显示当前运行的容器
docker ps
# 查看本地镜像
docker images
# 删除所有镜像
docker rmi $(docker images | grep -v RESPOSITORY | awk '{print $3}')
# 构建容器
docker build -t 镜像名称 . # 后面的. 指的是当前文件夹 (其实是Dockerfile存放的文件夹)
# 建立映像文件。–rm 选项是告诉Docker,在构建完成后删除临时的Container,Dockerfile的每一行指令都会创建一个临时的Container,一般这些临时生成的Container是不需要的
docker build --rm=true -t loen/lamp .
# 删除容器
docker rm 容器ID
# 删除所有容器
docker rm $(docker ps -a)
# 查看历史
docker history 镜像ID
# 导出容器
docker export 容器ID > xxx.tar
# 把 mynewimage 镜像保存成 tar 文件
docker save myimage | bzip2 -9 -c> /home/save.tar.bz2
# 加载 myimage 镜像
bzip2 -d -c < /home/save.tar.bz2 | docker load
$ docker run -it -p 8001:8080 --name my-nginx nginx
-it
- 交互式 bash 模式
-p 8001:8080
- 将端口 8001 映射到容器中的端口 8080
--name my-nginx
- 指定名称
nginx
- 要使用的图像
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
docker run -itd --name mysql8.0 --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
导入 SQL 脚本文件到 MySQL 容器
docker cp _data.sql mysql8.0:/tmp/
登入到 MySQL 容器内的 MySQL 服务
docker exec -it mysql8.0 mysql -uroot -p123456
create database xxx default character set utf8mb4;
use xxx;
source /tmp/xxx_struc.sql
Docker 方式安装最新版 Redis
docker run -d --name redis8.0 --restart=always -p 6379:6379 redis --requirepass "123456"
启动一个最新版 Nginx 的 Docker 临时容器
docker run -d --name nginx nginx
下载前端项目源码
修改 .env.production
中的生产环境配置
项目根目录下运行 yarn build
命令构建
上传dist
文件夹中的内容到到服务器/root/nginx/html
目录中
启动一个最新版 Nginx 的 Docker 临时容器
docker run -d --name nginx nginx
其中,Nginx 运行在 Docker 容器中对应的目录如下:
配置文件目录:/etc/nginx
日志目录:/var/log/nginx
项目根目录:/usr/share/nginx/html
复制 Nginx 的配置文件到宿主机中
mkdir nginx
cd nginx
mkdir conf
cd conf
docker cp nginx:/etc/nginx ./
cd ..
mkdir html
mkdir log
配置后端服务的反向代理
vim conf/nginx/conf.d/xxx.conf
停止之前启动的临时容器,并删除
docker stop nginx
docker rm nginx
启动新的 Nginx 容器
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":表示把时区设置为中国的时区
加群联系作者vx:xiaoda0423
仓库地址:https://github.com/webVueBlog/JavaGuideInterview