Docker安装
1.较旧版本的Docker被称为docker或docker-engine。如果已安装这些,请卸载它们以及相关的依赖项。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.设置存储库在新主机上首次安装Docker CE之前,需要设置Docker存储库。之后,您可以从存储库安装和更新Docker。
安装所需的包。yum-utils提供了yum-config-manager 效用,并device-mapper-persistent-data和lvm2由需要 devicemapper存储驱动程序。
yum -y install yum-utils device-mapper-persistent-data lvm2
3.使用以下命令设置稳定存储库。
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装最新版本的Docker CE和containerd:
yum install docker-ce docker-ce-cli containerd.io
或者安装特定版本:
yum -y install docker-ce-18.06.1.ce
5.启动Docker。
systemctl start docker --启动Docker
systemctl enable docker --设置Docker开机启动
6. 配置阿里云镜像加速器(国内外网访问慢可配置)
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1rz6b9bl.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
7.查看版本号
docker --version
Docker常用命令
帮助命令
docker version 自身验证(版本号等信息)
docker info 比version更全的自身描述
docker --help 帮助docker常用命令
systemctl enable docker.service docker服务自动重启设置
镜像命令
1.列出本地镜像
docker images [OPTIONS]
OPTIONS说明:
-a 列出本地的所有镜像
-q 只像是镜像ID
--digests 显示镜像的摘要信息
--no-trunc 显示完整的镜像信息
2.去Hub查询所有镜像(使用docker官方search搜索框)
docker search [OPTIONS]镜像
OPTIONS说明:
-s 列出收藏数不小于指定值的镜像
--no-trunc 显示完整的镜像描述信息
--automated 只列出automated build类型的镜像
3.下载镜像
docker pull [OPTIONS] image:[版本号]
OPTIONS说明:
docker pull centos 等价于 docker pull centos:latest 没写版本号自动获取最新版本
docker class Book 等价于 docker class Book extends Object
4.删除镜像
docker rmi [OPTIONS]image
OPTIONS说明:
docker rmi tomcat 等价于 docker rmi tomcat:latest 不写版本号默认删除latest
-f 镜像ID 删除单个镜像
-f 镜像名1:TAG 镜像名2:TAG 删除多个镜像
-f $(dovker images -qa) 删除全部镜像
5.打包镜像
docker commit 提交容器的副本使之成为一个新的镜像
docker commit -a="hetengfei" -m="del centos docs" d52498cea537 atguigu/centos6.6.6
docker commit -a 提交作者信息 -m 提交描述信息 容器ID 要创建的目标镜像名:[标签名] --目标镜像atguigu/centos6.6.6名字必须为小写
6.推送到阿里云
描述:镜像的生成方法:
DockerFile脚本生成生成新镜像
从容器打包一个新的镜像 docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]
一:阿里云创建镜像仓库
二:
1. 登录阿里云Docker Registry
$ sudo docker login --username=1139345215@qq.com registry.cn-beijing.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在产品控制台首页修改登录密码。
2. 从Registry中拉取镜像
$ sudo docker pull registry.cn-beijing.aliyuncs.com/htf-hub/test:[镜像版本号]
3. 将镜像推送到Registry
$ sudo docker login --username=1139345215@qq.com registry.cn-beijing.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-beijing.aliyuncs.com/htf-hub/test:[镜像版本号]
$ sudo docker push registry.cn-beijing.aliyuncs.com/htf-hub/test:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
容器命令
1.列出当前所有正在运行的容器
docker ps [OPTIONS]
OPTIONS说明:
-a 列出当前所有正在运行的容器+历史上运行过的容器
-l 显示最新创建的容器
-n 显示最近n个创建的容器
-q 静默模式,只显示容器编号
--no-trunc 不截断输出
2.新建并启动容器
docker run [OPTIONS]image[COMMAND][ARG...]
OPTIONS说明:
--name="容器名称" 为容器指定一个名称
--restart=always 容器开机自动启动
-d 后台运行容器,并返回容器ID,也即启动守护式容器
-i 以交互模式运行容器,通常与-听同事使用
-t 为容器分配一个伪终端,通常与-i同事使用
-P 随机端口映射(映射外部访问端口,访问宿主机IP+端口便可访问容器)
-p 指定端口映射,有以下四种格式(映射外部访问端口,访问宿主机IP+端口便可访问容器)
ip:hostPort:containerPort
id::containerPort
hostPort:containerPort
containerPort
3.创建不启动容器
docker create [OPTIONS]image[COMMAND][ARG...]
4.启动容器
docker start 容器ID或容器名称
5.重启容器
docker restart 容器ID或容器名称
设置自动重启:
docker run --restart=always <IMAGES> 运行容器时添加自动重启参数--restart=always
docker update --restart=always <CONTAINER ID> 设置已经启动容器自动重启
6.暂停容器
docker pause 容器ID或容器名称
7.恢复暂停容器
docker pause 容器ID或容器名称
8.停止容器
docker [OPTIONS] stop 容器ID或容器名称 温柔停止容器(容器自身有一个关闭的过程)
docker kill stop 容器ID或容器名称 强制停止容器(相当于拔掉电源插头)
9.退出容器
exit 停止并退出容器
Ctrl+P+Q 容器不停止退出
10.删除容器
docker rm [OPTIONS] 容器ID 删除已经停止的容器
OPTIONS说明:
-f 容器ID 关闭并删除单个容器
-f 容器名1:TAG 镜像名2:TAG 关闭并删除多个容器
-f $(dovker images -qa) 关闭并删除全部容器
docker ps -a -q | xargs docker rm
docker container rm $(docker container ls -a -q) 删除全部容器
11.启动守护式容器(启动守护容器没有进程执行则会自杀)
docker run -d 容器名 守护式容器(启动守护容器没有进程执行则会自杀)
docker run -it 容器名 交互式容器
12.查看容器日志
docker logs [OPTIONS]
OPTIONS说明:
-t 是加入时间戳
-f 跟随最新日志打印
-rail 数字显示多少条
docker run -d centos /bin/sh -c"while true;do echo hello zzyy ;sheep 2;done"(每过两秒打印hello zzyy)
13.查看容器内运行的进程
docker top 容器ID
14.查看容器内部的细节
docker inspect [OPTIONS] 容器ID或容器名称
OPTIONS说明:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
15.从宿主机直接进入正在运行的容器并以命令进行交互
docker exec -i-t 容器ID
docker attach 容器ID 直接进入容器启动命令终端,不会启动新的进程
docker exec 容器ID 是在容器中打开新的终端,并且可以启动新的进程
列子:
docker exec -it 容器ID /bin/bash 进入到容器命令行终端中(类似attach)
docker exec -it 容器ID ls -l /tmp 进入centos容器执行ls -l /tmp命令,并返回结果
16.主机容器相互内拷贝文件
docker cp 10b9a3588ab9:/tmp/yum /root 从10b9a3588ab9容器拷贝/tmp目录(或目录下文件)到主机/root目录
docker cp /root 10b9a3588ab9:/tmp/yum 将主机/root目录拷贝到容器10b9a3588ab9的/home/cloudera目录下。
Docker容器数据卷
是什么:一句话,类似我们Redis里面的Rdb和aof文件
能干嘛:1.容器持久化 2.容器间继承+共享数据
特点:
1.容器之间共享或重用数据
2.卷中的更改可以直接生效
3.数据卷中的更改不会包含在镜像的更新中
4.数据卷的生命周期一直持续到没有容器使用它为止
docker run -it contos 在镜像contos创建新的容器
docker run -it -v /宿主机绝对路径目录:/容器目录 contos 在镜像contos创建新的容器,并主机创建'宿主机绝对路径目录'、容器'容器目录'两个文件,文件内内容共享
docker run -it -v /宿主机绝对路径目录:/容器目录:ro contos 在镜像contos创建新的容器,并主机创建'宿主机绝对路径目录'、容器'容器目录'两个文件,文件内内容共享,ro代表容器文件夹只读
列入:
docker run -it -v /host1:/tataVolumeContainer1 -v /host2:/tataVolumeContainer1 contos /bin/bash
如果不指定/host1、/host2宿主机目录,docker会自动在宿主机下生成目录
查看宿主机生成路径:
1、docker inspect 查看宿主机详细信息
2、去Json详细信息"Volumes":{ }节点查看路径信息
3、默认生成容器卷,Docker挂在主机目录Docker访问出现'cannot open directory.:Permission denied'错误
解决办法:在挂在目录后多加一个--privileged=true参数即可
列入:docker run -it -v /宿主机绝对路径目录:/容器目录 --privileged=true contos
查看Docker容器卷挂目录
docker inspect 容器ID --查看下面Mounts节点
例如:
"Mounts": [
{
"Type": "bind",
"Source": "/opt/java/apache-tomcat-7.7.84",
"Destination": "/usr/local/tomcat/webapps",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]
运行DockerFile文件生成新镜像
DockerFile文件
File构建模板(命令是在镜像下容器中执行)
FROM centos --FROM当前要做的镜像,类似于父类镜像centos
MAINTAINER minmmis<htf@0311lhkj.com> --MAINTAINER作者信息,由那个人维护的镜像
ENV DEBIAM_FRONTEND noninteractive --ENV增加环境变量
RUN mkdir aaa --RUN运行需要的指令
VOLUME ["/dataVolumeContainer1","dataVolumeContainer2"] --说明在当前centos里面,根目录下新建两个容器卷'tataVolumeContainer1'、'tataVolumeContainer2'
CMD echo "finishen,------success1" --在centos里面打印出'finishen,------success1'一句话
CMD /bin/bash
docker build -f /mydocker/DockerFile -t hetengfei/centos . --运行DockerFile文件,根据centos父镜像,执行DockerFile内容生成新镜像hetengfei/centos,供人运行(千层饼概念)
保存镜像为本地文件
1.使用Docker save命令。
命令格式:
docker save -o 要保存的文件名 要保存的镜像
比如这里,我们将java8的镜像保存为文件:
docker save -o java8.tar lwieske/java-8
2、从文件载入镜像
使用Docker load命令。
命令格式:
docker load --input 文件
或者
docker load < 文件名
使用SSH工具将文件上传到另一台服务器。
然后通过命令载入镜像:
docker load < java8.tar
导入后可以使用docker images命令查看
防火墙设置(开启可能导致端口不通)
查看防火墙状态 # systemctl status firewalld
running 状态即防火墙已经开启
dead 状态即防火墙未开启
开启防火墙,# systemctl start firewalld 没有任何提示即开启成功
开启防火墙 # service firewalld start
关闭防火墙 # systemctl stop firewalld
centos7.3 上述方式可能无法开启,可以先#systemctl unmask firewalld.service 然后 # systemctl start firewalld.service
设置端口
查看已打开的端口 netstat -anp
查看想开的端口是否已开 # firewall-cmd --query-port=8888/tcp 提示no表示未开
开永久端口号 firewall-cmd --add-port=8888/tcp --permanent 提示 success 表示成功
重新载入配置 # firewall-cmd --reload 比如添加规则之后,需要执行此命令
再次查看想开的端口是否已开 # firewall-cmd --query-port=8888/tcp 提示yes表示成功
若移除端口 # firewall-cmd --permanent --remove-port=8888/tcp
测试运行mysql、tomcat
运行mysql
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7.21
运行mysql并挂在容器卷
docker run --restart=always --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v /opt/java/mysql/config/my.cnf:/etc/my.cnf -v /opt/java/mysql/data:/var/lib/mysql -d mysql:5.7.21
运行tomcat并挂载容器卷
docker run -d --restart=always -p 8080:8080 --name tomcat -v /opt/java/apache-tomcat-7.7.84:/usr/local/tomcat/webapps tomcat:7.0.84
从宿主机拷贝文件到镜像
docker cp /opt/java/apache-tomcat-7.7.84/aa.html tomcat:/usr/local/tomcat/webapps
从镜像拷贝文件到宿主机
docker cp tomcat:/usr/local/tomcat/webapps /opt/java/apache-tomcat-7.7.84