#查看CPU
$ dmesg |grep -i xeon
#查看内存
$ free -m 以MB为单位查询内存
#查看硬盘
$ df -m 以Mb为单位显示磁盘使用量和占用率
查看状态
$ systemctl status firewalld.service
开启防火墙
$ systemctl start firewalld.service
关闭防火墙
$ systemctl stop firewalld.service
开机启动防火墙
$ systemctl enable firewalld.service
禁止防火墙开机启动
$ systemctl disable firewalld.service
查看防火墙状态
$ firewall-cmd --state
查看防火墙所有开放的端口
# 只能查看到通过 firewall-cmd 命令开放的端口
$ firewall-cmd --zone=public --list-ports
开放端口
$ firewall-cmd --zone=public --add-port=5672/tcp --permanent
关闭端口
$ firewall-cmd --zone=public --remove-port=5672/tcp --permanent
配置立即生效
$ firewall-cmd --reload
查看端口占用
$ lsof -i:22
$ netstat -lnpt |grep 22
查看监听端口
$ netstat -lnpt
安装centos7
参考:https://blog.csdn.net/babyxue/article/details/80970526
centos7常用插件安装
参考:https://blog.csdn.net/m0_37822338/article/details/105599692
$ wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
$ tar xzf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
$ mv mysql-5.7.29-linux-glibc2.12-x86_64 /usr/local/mysql-5.7.29
yum install libncurses*
$ cd /usr/local/mysql-5.7.29/
# 数据
$ mkdir -p data
# 日志
$ mkdir -p log
在 /usr/local/mysql-5.7.29/
目录下执行
$ groupadd mysql
$ useradd -r -g mysql mysql # -g:指定用户所属的用户组,-r:建立系统账号
$ chown -R mysql:mysql /usr/local/mysql-5.7.29
vim 按 i 进入插入模式,退出命令:插入模式下依次输入: esc ,:wq(保存并退出) / :q!(强制退出)
$ vim /etc/my.cnf
# 写入以下内容,注意路径
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql-5.7.29
datadir=/usr/local/mysql-5.7.29/data
socket=/tmp/mysql.sock
lc_messages_dir = /usr/local/mysql-5.7.29/share/
lc_messages = en_US
# 字符集
character_set_server=utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
symbolic-links=0
explicit_defaults_for_timestamp=true
# 导入包允许的大小设置
max_allowed_packet=1024M
max_connections=1500
# 东八区时区,北京时区
default-time-zone = '+8:00'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 忽略表名大小写;1表示忽略大小写,0表示解析大小写
lower_case_table_names=1
log-error=/usr/local/mysql-5.7.29/log/err.log
pid-file=/usr/local/mysql-5.7.29/mysql.pid
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
初始化
$ /usr/local/mysql-5.7.29/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql-5.7.29/ --datadir=/usr/local/mysql-5.7.29/data/ --user=mysql --initialize
初始密码
$ cat /usr/local/mysql-5.7.29/log/err.log
# 密码在最后一行
A temporary password is generated for root@localhost: t/0lljLYs9Sj
环境变量(支持使用mysql -u -p命令)
$ vim /etc/profile
# 文件末尾写入
# mysql
PATH=/usr/local/mysql-5.7.29/bin:$PATH
# 刷新环境变量配置
$ source /etc/profile
mysqldump 命令
ln -fs /usr/local/mysql-5.7.29/bin/mysqldump /usr/bin
$ cp -a /usr/local/mysql-5.7.29/support-files/mysql.server /etc/init.d/mysql
$ service mysql start 或者 /etc/init.d/mysql start
$ service mysql stop 或者 /etc/init.d/mysql stop
$ service mysql restart 或者 /etc/init.d/mysql restart
$ mysql -uroot -p
mysql> alter user user() identified by "新密码";
mysql> use mysql;
mysql> update user set authentication_string=password('新密码') where user='root';
mysql> update user set host='%' where user='root';
mysql> flush privileges;
mysql> exit;
开放端口(仅在防火墙开启时配置)
$ firewall-cmd --zone=public --add-port=3306/tcp --permanen
$ firewall-cmd --reload
$ cp -a /usr/local/mysql-5.7.29/support-files/mysql.server /etc/rc.d/init.d/mysql
$ vim /etc/rc.d/rc.local
# 末尾添加以下内容
/etc/rc.d/init.d/mysql start
# 注:/etc/init.d 是指向 /etc/rc.d/init.d 的软链接,如执行过可省
启动mysql报错mysqld_safe error: log-error set to ‘/var/log/mariadb/mariadb.log’
[root@localhost /]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
[root@localhost /]# rpm -qa | grep java
python-javapackages-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
tzdata-java-2018c-1.el7.noarch
java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64
java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64
[root@localhost /]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.1612.b14.el7.x86_64
[root@localhost /]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.1612.b14.el7.x86_64
[root@localhost /]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.1712.6.13.2.el7.x86_64
[root@localhost /]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.1712.6.13.2.el7.x86_64
从官网下载新的jdk1.8的rpm安装包
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
并上传新的jdk-8u191-linux-x64.rpm软件到/usr/local/src/执行以下操作:
[root@localhost src]# rpm -ivh jdk-8u191-linux-x64.rpm
警告:jdk-8u191-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY
准备中...
################################# [100%]
正在升级/安装...
1:jdk1.8-2000:1.8.0_191-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
[root@localhost src]# java -version
java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
JDK默认安装在/usr/java中
验证安装 ,执行以下操作,查看信息是否正常:
[root@localhost src]# java -version
java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
配置环境变量
我的机器安装完jdk-8u191-linux-x64.rpm后不用配置环境变量也可以正常执行javac、java –version操 作,因此我没有进行JDK环境变量的配置。但是为了以后的不适之需,这里还是记录一下怎么进行配置, 操作如下:
修改系统环境变量文件
[root@localhost src]# vi /etc/profile
向文件里面追加以下内容:
JAVA_HOME=/usr/java/jdk1.8.0_191-amd64 JRE_HOME=/usr/java/jdk1.8.0_191-amd64/jre PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export JAVA_HOME JRE_HOME PATH CLASSPATH
使修改生效
[root@localhost /]# source /etc/profile
[root@localhost /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/java/jdk1.8.0_1 91-amd64/bin:/usr/java/jdk1.8.
查询安装过的docker包
$ yum list installed | grep docker
删除安装的软件包
$ yum -y remove docker
$ yum -y remove docker-client
$ yum -y remove docker-common
$ uname -r 本机<内核版本: 3.10.0-1062.el7.x86_64>
**这个步骤很有必要!!**我之前没更新就踩过坑
$ yum update
yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ yum list docker-ce --showduplicates | sort -r
$ sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce
$ sudo systemctl start docker
$ sudo systemctl enable docker
(有client和service两部分表示docker安装启动都成功了)
$ docker version
$ systemctl status docker
注册阿里云账号
进入阿里云控制台(https://cr.console.aliyun.com/cn-zhangjiakou/instances/mirrors)
复制加速器地址
修改daemon配置文件/etc/docker/daemon.json来使用加速器
$ vi /etc/docker/daemon.json
#加入如下内容
{
"registry-mirrors": ["https://XXXXXXX.mirror.aliyuncs.com"],
"insecure-registries":["XXXXXXX"]
}
#registry-mirrors 你自己的加速器地址
#insecure-registries 选择你docker推送的私有仓库地址 (没有的话可以不加)
重启daemon
$ systemctl daemon-reload
重启docker
$ systemctl restart docker
$ sudo curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose version
https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.4.tgz
$ sudo tar -zxvf harbor-offline-installer-v1.9.4.tgz
进入harbor文件夹修改harbor.yml
$ cd harbor
$ sudo vi harbor.yml
# 自行更改为服务器内部ip (“:”和ip之间必须要有空格)
hostname: XXXXXXXX #这个IP填写 harbor的仓库地址 即harbor所在虚拟机的IP
$ sudo ./install.sh
http://XXXXXXX #填写虚拟机ip
帐号:admin
密码:Harbor12345
(linux不登录后期push会出问题)
$ docker login XXXXXXX #harbor所在主机的IP地址 一般harbor会和docker一起安装在同一虚拟机上 所以填写该虚拟机IP就好了
#登录的账号密码为harbor的账号密码
#如果登录不成功 可从以下几个方面找原因
#1.查看/etc/docker/daemon.json是否添加了harbor仓库的IP地址(这个地方就是之前添加阿里云镜像加速的地方)
#"insecure-registries":填入harbor仓库的IP
#IP更改完后执行一下命令重启docker
$ systemctl daemon-reload
$ systemctl restart docker
#2.harbor的harbor.yml文件里的hostname是否修改为了所在虚拟机的ip
注意:在外网开放有安全风险,只推荐在内网对外开放
$ vi /lib/systemd/system/docker.service
#在[Service]节点下方增加
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
$ systemctl daemon-reload
$ systemctl restart docker
$ docker-compose stop
$ docker-compose start
$ firewall-cmd --add-port=2375/tcp --permanent
$ service firewalld restart
使用harbor作为私有库,需要配置maven,找到setting.xml加入以下配置
<pluginGroups>
<pluginGroup>com.spotifypluginGroup>
pluginGroups>
<server>
<id>192.168.186.129id>
<username>adminusername>
<password>Harbor12345password>
<configuration>
<email>[email protected]email>
configuration>
server>
(添加完环境变量可能还是失败,重启电脑)
变量值里的XXXXX替换为你虚拟机的地址
在项目的根目录里面执行
mvn clean package dockerfile:build dockerfile:push
手动推送镜像前,一定要先试试docker能否登录到harbor!!!
$ docker login XXXXXXX #harbor所在主机的IP地址 一般harbor会和docker一起安装在同一虚拟机上 所以填写该虚拟机IP就好了
#登录的账号密码为harbor的账号密码
#如果登录不成功 可从以下几个方面找原因
#1.查看/etc/docker/daemon.json是否添加了harbor仓库的IP地址(这个地方就是之前添加阿里云镜像加速的地方)
#"insecure-registries":填入harbor仓库的IP
#IP更改完后执行一下命令重启docker
$ systemctl daemon-reload
$ systemctl restart docker
#2.harbor的harbor.yml文件里的hostname是否修改为了所在虚拟机的ip
随便找一个文件夹创建dockerfile文件
dockerfile文件参数详解
FROM # 基础镜像,就是一切从这里构建 centos
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤,tomcat镜像,这个tomcat压缩包就是添加的内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录位置
EXPOSE # 暴露端口配置 -p
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承DockerFil,这个时候就会触发onbuild的指令
COPY # 类似ADD命令,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量! 比如说设置内存大小,mysql的密码
dockerfile文件示例
FROM adoptopenjdk/openjdk8-openj9:alpine-slim
MAINTAINER [email protected]
RUN mkdir -p /blade/demo
WORKDIR /blade/demo
EXPOSE 9101
ADD ./target/blade-demo.jar ./app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
CMD ["--spring.profiles.active=test"]
在创建该dockerfile的文件夹执行下面的代码
$ docker build -f dockerfile01 -t /blade/blade-demo:2.8.0.RELEASE .
#常用参数详解
--build-arg,设置构建时的环境变量
--no-cache,默认false。设置该选项,将不使用Build Cache构建镜像
--pull,默认false。设置该选项,总是尝试pull镜像的最新版本
--compress,默认false。设置该选项,将使用gzip压缩构建的上下文
--disable-content-trust,默认true。设置该选项,将对镜像进行验证
--file, -f,Dockerfile的完整路径,默认值为‘PATH/Dockerfile’
--isolation,默认--isolation="default",即Linux命名空间;其他还有process或hyperv
--label,为生成的镜像设置metadata
--squash,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。
--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
--network,默认default。设置该选项,Set the networking mode for the RUN instructions during build
--quiet, -q ,默认false。设置该选项,Suppress the build output and print image ID on success
--force-rm,默认false。设置该选项,总是删除掉中间环节的容器
--rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器
$ docker push 192.168.147.130/blade/blade-demo:2.8.0.RELEASE
# harbor仓库IP/项目名称:镜像标签
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
Docker是一个客户端/服务器(C/S)架构的程序。Docker客户端只需向Docker 服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。Docker守护进程有时也称为 Docker引擎。Docker 提供了一个命令行工具docker 以及一整套RESTful API来与守护进程交互。用户可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的 Docker '客户端连接到运行在另一台宿主机上的远程 Docker守护进程。图1-1描绘了Docker的架构。
镜像是构建Docker 世界的基石。用户基于镜像来运行自己的容器。镜像也是Docker 生命周期中的“构建”部分。镜像是基于联合(Union)文件系统的一种层式的结构,由一系列指令一步一步构建出来。例如:
●添加一个文件;
●执行一个命令;
●打开一个端口;
也可以把镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。
Docker 用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营的公共 Registry叫作 Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像。
根据最新统计,Docker Hub上有超过10000注册用户构建和分享的镜像。需要 Nginx Web服务器的Docker镜像,或者Asterix开源PABX系统的镜像,抑或是MySQL数据库的镜象?这些镜像在 Docker Hub上都有,而且具有多种版本。
用户也可以在 Docker Hub 上保存自己的私有镜像。例如,包含源代码或专利信息等需要保密的镜像,或者只在团队或组织内部可见的镜像。
Docker可以帮用户构建和部署容器,用户只需要把自己的应用程序或服务打包放进容器即可。我们刚刚提到,容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker 生命周期中的构建或打包阶段,而容器则是启动或执行阶段。
总结起来,Docker容器就是:
一个镜像格式;
一系列标准的操作;
一个执行环境。
Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计哲学中,唯一不同的是:集装箱运输货物,而 Docker运输软件。
每个容器都包含一个软件镜像,也就是容器的“货物”,而且与真正的货物一样,容器里的软件镜像可以进行一些操作。例如,镜像可以被创建、启动、关闭、重启以及销毁。
和集装箱一样,Docker在执行上述操作时,并不关心容器中到底塞进了什么,它不管里面是 Web 服务器,还是数据库,或者是应用程序服务器什么的。所有容器都按照相同的方式将内容“装载”进去。
Docker也不关心用户要把容器运到何方:用户可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,再把容器部署到Amazon EC2主机的集群中去。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。
使用Docker,可以快速构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续集成(continuous integration,CI)测试环境或者任意一种应用程序、服务或工具。可以在本地构建一个完整的测试环境,也可以为生产或开发快速复制一套复杂的应用程序栈。可以说,Docker 的应用场景相当广泛。
$ systemctl start docker
$ systemctl stop docker
$ systemctl restart docker
$ systemctl status docker
$ docker version
$ docker info
$ docker --help
$ docker search java
- NAME : 镜像名称
- DESCRIPTION :
- STARS : 镜像仓库收藏数
- OFFICIAL : 是否为官方文档
使用 docker pull 命令下载镜像。
如果要指定版本请在命令后面加冒号 <:version>
$ docker pull java:8
如果是个人镜像,需要使用 #docker pull 用户名/仓库名
$ docker pull 192.168.7.26:5000/test
$ docker images
$ docker rmi java
$ docker images|grep none|awk '{print $3}'|xargs docker rmi -f
$ docker image rm 镜像名称/镜像ID
$ docker save tomcat -o /myimg.tar
#docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
$ docker load -i 镜像保存文件位置
#任何装 docker 的地方加载镜像保存的文件 使其恢复为一个镜像
启动
$ docker-compose up -d worker
重启
$ docker-compose restart worker
关闭所有模块
$ docker-compose stop
删除所有模块
$ docker-compose rm
# 示例
$ docker run -itd --privileged=true --name test --hostname test --restart unless-stopped --net=host
--cpus=1 -m 512M -v /tmp:/tmp -w /opt -p 80:80 -e MYSQL_IP=192.168.1.1
--device=/dev/uhid docker.io/nginx:latest
-i, --interactive Keep STDIN open even if not attached
#即使未连接STDIN(标准输入)也保持打开状态,分配一个交互终端
-t, --tty Allocate a pseudo-TTY
#表示容器启动后会进入其命令行,与it一起使用。
#分配一个伪tty设备,可以支持终端登录
PS:针对纯操作系统镜像(没有守护进程的)在docker run的时候需要加-it参数,否则启动后会自动退出
-d, --detach Run container in background and print container ID
#让容器在后台运行并打印容器的ID。如果你的容器启动会打印日志,那边加-d选项在终端就看不到了,需要用docker logs -f 容器ID查看
--privileged=true Give extended privileges to this container
#授予此容器扩展特权,也就是开启特权模式;
#这种模式下容器对docker宿主机拥有root访问权限,允许我们以其宿主机具有(几乎)所有能力来运行容器,包括一些内核特性和设备访问,慎用
--name string Assign a name to the container
#给容器取一个名字,用docker ps可以查看
--rm
#退出容器后,容器会被删除,常用于测试
--hostname string Container host name
#设置容器里面的主机名,登陆到容器里面可以看到
--restart string Restart policy to apply when a container exits (default "no")
#容器退出时的重启策略(4种)
1.no,默认策略,在容器退出时不重启容器
2.on-failure,在容器非正常退出时(退出状态非0),才重启容器
3.on-failure:3,在容器非正常退出时重启容器,最多重启3次
4.always,在容器退出时总是重启容器
5.unless-stopped,在容器退出时总是重启容器,如果容器正常stopped,然后机器重启或docker服务重启,容器将不会被restart
#更改已运行容器的重启策略
$ docker update --restart=always test
--network string Connect a container to a network (default "default")
#--network可以省略为--net
#标准Docker支持4种网络模式
1.bridge 使用docker daemon指定的网桥,默认为docker0;使用--net=bridge指定,为默认设置
2.host 容器使用主机的网络
3.container:NAME_or_ID > 使用其他容器的网络,共享IP和PORT等网络资源
4.none 容器使用自己的网络,使用--net=none指定
$ docker inspect test 查看,使用主机网络,不再给容器单独分配IP地址
--cpus=1 -m 512M
#设置容器CPU和内存的使用上限
-v, --volume list Bind mount a volume (default [])
#容器与宿主机绑定一个卷
#volumes与bind mounts的区别
volumes方式:宿主机有数据时,以宿主机为准;宿主无数据,从容器复制过来,再以宿主机为准
1.bind方式的宿主机的目录必须存在
2.bind方式的宿主机目录会覆盖掉容器中目录的内容(并不删除,只是隐藏)
-v /opt/nginx:/etc/nginx
# /opt/nginx不存在会自动创建;/opt/nginx会覆盖/etc/nginx目录下的内容
#挂载时设置读写权限
ro:只读,在容器内只读,只能通过宿主机来操作
rw:读写
$ docker run -d --name nginx -v /opt/nginx:/opt/test:ro nginx
#在容器内不能操作 在容器外可以操作
-w --workdir string Working directory inside the container
#指定容器的工作目录
-p 80:80
#端口映射,前面为宿主机的端口,后面为容器服务进程端口,访问宿主机的80,最终会转发给容器的80端口,实现方式为iptables
#注意:如果采用的是–net=host方式,那么不需要做规则转发,可以直接访问
-e, --env list Set environment variables (default [])
#给容器声明环境变量,在容器内部可以通过export查看
--device list Add a host device to the container (default [])
#增加主机的一个设备到容器,也就是让容器拥有访问这个设备的权限
#默认情况下,container拥有对设备的读,写,创建设备文件的权限。使用:rwm来配合–device,你可以控制这些权限。
docker run --device=/dev/sda:/dev/xvdc --rm
$ docker ps #查看正在运行容器列表
$ docker ps -a #查看所有容器
$ docker stop 容器名/容器ID
#删除一个容器
$ docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
$ docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
$ docker rm -f $(docker ps -aq)
$ docker exec -it #容器名/容器ID /bin/bash
#进入 前面的 redis001容器
$ docker exec -it redis001 /bin/bash
#-----直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
$ exit
# 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q
$ docker restart 容器ID/容器名
$ docker logs -f --tail=要查看末尾多少行 默认all 容器ID
先来看看Docker的理念:
- 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
- 容器之间希望有可能共享数据
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,
那么当容器删除后,数据自然也就没有了。
为了能保存数据在docker中我们使用卷。
一句话就是有点像我们redis里的rdb和aof文件。
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
数据卷可以理解为宿主机中的一个文件或者一个目录;
当容器目录和数据卷目录绑定后,对方的修改会立即同步;
一个数据卷可以被多个容器同时挂载;
一个容器也可以挂载多个数据卷
-it:运行容器并进入到容器内部 [root@dbb72956ef0c /]
[root@hadoop101 ~]# docker run -it --name c1 -v /usr/local/redis/data:/root/data_container centos:7 /bin/bash
[root@dbb72956ef0c /]# cd ~
[root@dbb72956ef0c ~]# ll
total 4
-rw-------. 1 root root 3416 Oct 1 2019 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 May 25 05:11 data_container
多容器进行数据交换:
(1)多个容器挂载同一个数据卷
(2)数据卷容器
Data Container c3称为数据卷容器
3.5查看数据卷是否挂载成功
$ docker inspect f89b5db98ede
一句话就是有点像我们redis里的rdb和aof文件。
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
数据卷可以理解为宿主机中的一个文件或者一个目录;
当容器目录和数据卷目录绑定后,对方的修改会立即同步;
一个数据卷可以被多个容器同时挂载;
一个容器也可以挂载多个数据卷
-it:运行容器并进入到容器内部 [root@dbb72956ef0c /]
[root@hadoop101 ~]# docker run -it --name c1 -v /usr/local/redis/data:/root/data_container centos:7 /bin/bash
[root@dbb72956ef0c /]# cd ~
[root@dbb72956ef0c ~]# ll
total 4
-rw-------. 1 root root 3416 Oct 1 2019 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 May 25 05:11 data_container
多容器进行数据交换:
(1)多个容器挂载同一个数据卷
(2)数据卷容器
Data Container c3称为数据卷容器
$ docker inspect f89b5db98ede