全网最全docker初级入门!!!

一、centos7常用命令

1.查看CPU、硬盘和内存使用情况

#查看CPU
$ dmesg |grep -i xeon
#查看内存
$ free -m  以MB为单位查询内存
#查看硬盘
$ df -m 以Mb为单位显示磁盘使用量和占用率

2. 防火墙

2.1 systemctl命令

查看状态

$ systemctl status firewalld.service

开启防火墙

$ systemctl start firewalld.service

关闭防火墙

$ systemctl stop firewalld.service

开机启动防火墙

$ systemctl enable firewalld.service

禁止防火墙开机启动

$ systemctl disable firewalld.service
2.2 firewall命令

查看防火墙状态

$ 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

3. 端口操作命令

查看端口占用

$ lsof -i:22
$ netstat -lnpt |grep 22

查看监听端口

$ netstat -lnpt

二、Docker环境安装

1.VMware安装centos7

安装centos7

参考:https://blog.csdn.net/babyxue/article/details/80970526

centos7常用插件安装

参考:https://blog.csdn.net/m0_37822338/article/details/105599692

2.centos7安装MySQL5.7

2.1 下载&解压
$ 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
2.2 安装依赖
yum install libncurses*
2.3 创建数据和日志文件夹
$ cd /usr/local/mysql-5.7.29/

# 数据
$ mkdir -p data
# 日志
$ mkdir -p log
2.4 创建用户和组并赋权限

/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
2.5 添加配置

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

2.6 初始化

初始化

$ /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
2.7 命令支持

环境变量(支持使用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
2.8 测试:启动/停止/重启
$ 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
2.9 密码修改&远程访问
$ 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
2.10 开机自启
$ 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 的软链接,如执行过可省
2.11错误解决

启动mysql报错mysqld_safe error: log-error set to ‘/var/log/mariadb/mariadb.log’

3.centos7安装JDK1.8

3.1检查系统原版本
[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)
3.2进一步查看JDK信息
[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
3.3卸载OpenJDK
[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
3.4安装JDK

从官网下载新的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安装

1.卸载Docker

查询安装过的docker包

$ yum list installed | grep docker

删除安装的软件包

$ yum -y remove docker                        
$ yum -y remove docker-client                  
$ yum -y remove docker-common

2.查看内核版本

<Docker 要求 CentOS 系统的内核版本高于 3.10>

$ uname -r         本机<内核版本: 3.10.0-1062.el7.x86_64>

3.把yum包更新到最新

**这个步骤很有必要!!**我之前没更新就踩过坑

$ yum update 

4.安装重要软件包

yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5.设置yum源

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

6.查看仓库中docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates | sort -r

7.安装docker

$ sudo yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce

8.启动并加入开机启动

$ sudo systemctl start docker
$ sudo systemctl enable docker

9.验证安装是否成功

(有client和service两部分表示docker安装启动都成功了)

$ docker version

10.查看docker服务状态

$ systemctl status docker

11.配置镜像加速器

注册阿里云账号

进入阿里云控制台(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

五、安装Docker-compose

1.下载

$ 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

2.授权

$ chmod +x /usr/local/bin/docker-compose

3.查看版本

$ docker-compose version

六、安装Harbor

1.下载tgz包

https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.4.tgz

2.解压

$ sudo tar -zxvf harbor-offline-installer-v1.9.4.tgz

3.修改harbor.yml配置文件

进入harbor文件夹修改harbor.yml

$ cd harbor
$ sudo vi harbor.yml
# 自行更改为服务器内部ip (“:”和ip之间必须要有空格)
hostname: XXXXXXXX  #这个IP填写 harbor的仓库地址 即harbor所在虚拟机的IP

4.启动harbor服务

$ sudo ./install.sh

5.访问Harbor(密码可以在在harbor.yml配置文件里面修改)

http://XXXXXXX #填写虚拟机ip
帐号:admin
密码:Harbor12345 

6.docker登录

(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

7.在Harbor新建私有项目

七、Maven推送镜像到Harbor

1.docker开启远程访问

注意:在外网开放有安全风险,只推荐在内网对外开放

$ 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

2.Maven配置

使用harbor作为私有库,需要配置maven,找到setting.xml加入以下配置

<pluginGroups> 
    <pluginGroup>com.spotify</pluginGroup> 
</pluginGroups>
<server> 
    <id>192.168.186.129</id> 
    <username>admin</username> 
    <password>Harbor12345</password> 
    <configuration>
        <email>smallchill@163.com</email> 
    </configuration>
</server>

3.添加docker环境变量

(添加完环境变量可能还是失败,重启电脑)

变量值里的XXXXX替换为你虚拟机的地址

4.推送

在项目的根目录里面执行

mvn clean package dockerfile:build dockerfile:push

八、手动推送镜像到Harbor

1.docker能正常登录

手动推送镜像前,一定要先试试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

2.在虚拟机上创建dockerfile文件

随便找一个文件夹创建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 maggic_zxx@163.com

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"]

3.通过dockerfile创建镜像

在创建该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,即整个构建过程成功后删除中间环节的容器

4.将镜像推送到harbor

$ docker push 192.168.147.130/blade/blade-demo:2.8.0.RELEASE
#  harbor仓库IP/项目名称:镜像标签

九、Docker学习

1.客户端/服务器/镜像/容器 之间的关系

​ Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

​ Docker 容器通过 Docker 镜像来创建。

1.1Docker客户端和服务器

​ Docker是一个客户端/服务器(C/S)架构的程序。Docker客户端只需向Docker 服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。Docker守护进程有时也称为 Docker引擎。Docker 提供了一个命令行工具docker 以及一整套RESTful API来与守护进程交互。用户可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的 Docker '客户端连接到运行在另一台宿主机上的远程 Docker守护进程。图1-1描绘了Docker的架构。

1.2Docker镜像

​ 镜像是构建Docker 世界的基石。用户基于镜像来运行自己的容器。镜像也是Docker 生命周期中的“构建”部分。镜像是基于联合(Union)文件系统的一种层式的结构,由一系列指令一步一步构建出来。例如:
​ ●添加一个文件;

​ ●执行一个命令;

​ ●打开一个端口;
​ 也可以把镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。

1.3Registry

​ Docker 用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营的公共 Registry叫作 Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像。

​ 根据最新统计,Docker Hub上有超过10000注册用户构建和分享的镜像。需要 Nginx Web服务器的Docker镜像,或者Asterix开源PABX系统的镜像,抑或是MySQL数据库的镜象?这些镜像在 Docker Hub上都有,而且具有多种版本。

​ 用户也可以在 Docker Hub 上保存自己的私有镜像。例如,包含源代码或专利信息等需要保密的镜像,或者只在团队或组织内部可见的镜像。

1.4容器

​ Docker可以帮用户构建和部署容器,用户只需要把自己的应用程序或服务打包放进容器即可。我们刚刚提到,容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker 生命周期中的构建或打包阶段,而容器则是启动或执行阶段。

​ 总结起来,Docker容器就是:

  • 一个镜像格式;

  • 一系列标准的操作;

  • 一个执行环境。

    Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计哲学中,唯一不同的是:集装箱运输货物,而 Docker运输软件。

    每个容器都包含一个软件镜像,也就是容器的“货物”,而且与真正的货物一样,容器里的软件镜像可以进行一些操作。例如,镜像可以被创建、启动、关闭、重启以及销毁。

​ 和集装箱一样,Docker在执行上述操作时,并不关心容器中到底塞进了什么,它不管里面是 Web 服务器,还是数据库,或者是应用程序服务器什么的。所有容器都按照相同的方式将内容“装载”进去。

​ Docker也不关心用户要把容器运到何方:用户可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,再把容器部署到Amazon EC2主机的集群中去。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。

​ 使用Docker,可以快速构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续集成(continuous integration,CI)测试环境或者任意一种应用程序、服务或工具。可以在本地构建一个完整的测试环境,也可以为生产或开发快速复制一套复杂的应用程序栈。可以说,Docker 的应用场景相当广泛。

2.docker常用命令

2.1docker基础命令
2.1.1启动docker
$ systemctl start docker
2.1.2关闭docker
$ systemctl stop docker
2.1.3重启docker
$ systemctl restart docker
2.1.4查看docker运行状态
$ systemctl status docker
2.1.5查看docker版本号信息
$ docker version
2.1.6查看docker详细信息
$ docker info
2.1.7docker 帮助命令
$ docker --help
2.2关于镜像的操作命令
2.2.2搜索镜像
$ docker search java

- NAME : 镜像名称
- DESCRIPTION :
- STARS : 镜像仓库收藏数
- OFFICIAL : 是否为官方文档

  • AUTOMATED : 是否是自动构建的仓库
2.2.2下载镜像

​ 使用 docker pull 命令下载镜像。
​ 如果要指定版本请在命令后面加冒号 <:version>

$ docker pull java:8

​ 如果是个人镜像,需要使用 #docker pull 用户名/仓库名

$ docker pull 192.168.7.26:5000/test
2.2.3列出镜像
$ docker images

2.2.4删除本地镜像
$ docker rmi java
2.2.5删除所有tag为none的镜像
$ docker images|grep none|awk '{print $3}'|xargs docker rmi -f
2.2.6强制删除镜像
$ docker image rm 镜像名称/镜像ID
2.2.7保存镜像
$ docker save tomcat -o /myimg.tar
#docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
2.2.8加载镜像
$ docker load -i 镜像保存文件位置
#任何装 docker 的地方加载镜像保存的文件 使其恢复为一个镜像
2.3关于容器的操作命令
2.3.1通过docker-compose创建和启动容器

启动

$ docker-compose up -d  worker 

重启

$ docker-compose restart worker

关闭所有模块

$ docker-compose stop

删除所有模块

$ docker-compose rm
2.3.2通过docker命令创建和启动容器
# 示例
$ 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

2.3.3查看容器
$ docker ps #查看正在运行容器列表
$ docker ps -a #查看所有容器
2.3.4停止容器
$ docker stop 容器名/容器ID
2.3.5删除容器
#删除一个容器
$ docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
$ docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
$ docker rm -f $(docker ps -aq)
2.3.6进入容器
$ docker exec -it #容器名/容器ID /bin/bash

#进入 前面的 redis001容器   
$ docker exec -it redis001 /bin/bash
2.3.7退出容器
#-----直接退出  未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭  
$ exit

# 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q
2.3.8重启容器
$ docker restart 容器ID/容器名
2.3.9查看容器日志
$ docker logs -f --tail=要查看末尾多少行 默认all 容器ID

3.容器数据卷

3.1容器数据卷是什么

先来看看Docker的理念:

  • 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
  • 容器之间希望有可能共享数据

Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,

那么当容器删除后,数据自然也就没有了。

为了能保存数据在docker中我们使用卷。

一句话就是有点像我们redis里的rdb和aof文件。

3.2容器数据卷有何用

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

特点:

1:数据卷可在容器之间共享或重用数据

2:卷中的更改可以直接生效

3:数据卷中的更改不会包含在镜像的更新中

4:数据卷的生命周期一直持续到没有容器使用它为止

3.3容器数据卷的概念

数据卷可以理解为宿主机中的一个文件或者一个目录;

当容器目录和数据卷目录绑定后,对方的修改会立即同步;

一个数据卷可以被多个容器同时挂载;

一个容器也可以挂载多个数据卷

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
3.5数据卷容器

多容器进行数据交换:

(1)多个容器挂载同一个数据卷

(2)数据卷容器

Data Container c3称为数据卷容器

3.5查看数据卷是否挂载成功

$ docker  inspect f89b5db98ede

一句话就是有点像我们redis里的rdb和aof文件。

3.2容器数据卷有何用

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

特点:

1:数据卷可在容器之间共享或重用数据

2:卷中的更改可以直接生效

3:数据卷中的更改不会包含在镜像的更新中

4:数据卷的生命周期一直持续到没有容器使用它为止

3.3容器数据卷的概念

数据卷可以理解为宿主机中的一个文件或者一个目录;

当容器目录和数据卷目录绑定后,对方的修改会立即同步;

一个数据卷可以被多个容器同时挂载;

一个容器也可以挂载多个数据卷

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
3.5数据卷容器

多容器进行数据交换:

(1)多个容器挂载同一个数据卷

(2)数据卷容器

Data Container c3称为数据卷容器




3.5查看数据卷是否挂载成功

$ docker  inspect f89b5db98ede
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值