CentOS安装教程 官网教程,更详细
CentOS安装教程 阿里教程,快速安装
注意:Windows系统安装需要去官网下载客户端。体验一般,但是没有Linux环境,又不想装虚拟机的朋友们可以尝试。
使用与Linux版本并无区别。
Docker官网学习文档(英文,但全面)
Docker阿里云学习文档
本文笔记主要内容学自bilibiliDocker核心技术与【狂神说Java】Docker最新超详细版教程通俗易懂,自觉不错,大家也可以通过视频快速入门。
容器:实例对象,是一个集装箱,可以把容器看作简易版的Linux环境;
镜像:只读的模板,用来创建容器。可以创建多个容器,例如mysql redis centOS 等;
仓库:集中存放镜像的。(阿里云与网易云有仓库镜像,可以加速)。
Docker deamon :Docker与外部客户端的通讯接口。后台的进程。
我们把java代码,环境,配置文件…–> images镜像文件 --> Docker容器 容器即可运行j既定内容。
容器与镜像的关系,类似于java的对象
P p1=new P1(); P p2=new P1(); //P相当于镜像,p1相当于容器,可利用镜像创建多个镜像
Doker比虚拟机 瘦在哪里?围绕以下两点叙述:(常考面试题,亲身经历)
Docker安装成功后,小试牛刀:
#docker安装成功后,小试牛刀:
#使用 docker --version查看版本,确认安装成功!
docker --version
#把官网demo:“hello-word” 镜像拉取到本地
docker pull hello-world
#利用刚拉取的“hello-word” 创建创建容器,跑起来!
docker run hello-world
#输出结果
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
docker search
:从dockerhub上搜索镜像的名字 (docker search -s 30 tomcat --no-trunc )docker pull
: 下载镜像(从换过的源),可以从dockerhub上搜索结果复制命令。docker pull tomcat:latest
加版本号,默认latestdocker rmi
(remove image)删除镜像docker rmi -f hello-world
强制删除docker rmi h1 h2
删除多个,用空格分开。docker rm
删除容器实例。docker images
查看所有镜像docker ps
查看所有运行的容器信息(常用来查看容器ID )新建并启动容器:docker run [optinos] IMAGE
本地有image则用,无则从远处拉
options:
- -d
后台 运行容器 // 注意,这里直接单独-d会立即自杀,必须有前台应用才会存活
- --name
指定名字
- -p
随即端口 -P 指定端口
- -i
以交互模式启动
- -t
为容器分配一个伪终端(-it 配合使用)
eg: docker run -it centos //在docker中使用centos,并直接打开
查看运行的容器:docker ps
(-l:上一个容器 -a 当前和历史; -q:只显示id)
退出容器 exit:关闭容器并退出
Ctrl+P+Q`:不关闭容器,退出 (用什么方式重新打开??查看9)
启动容器: docker start +id
(ps查id)
停止容器: docker stop //温柔
强制停止容器: docker kill //拔电源
删除已停止的容器 docker rm 容器ID
删除所有
docker rm -f $( docker ps -q)
//用ps查出所有id,传给rm 全部删除
查看容器日志 docker logs -f -t --tail 容器ID
(-t加入时间戳 -f 刷新日志)
查看容器内部进程 docker top 容器ID
进入正在运行的容器
docker attach 容器ID
进入容器
docker exec 容器ID
进入容器 或 (不进去)执行一个任务 很重要!
eg:
docker exec -it ID /bin/bash
//进入主机
docker exefc ID ls
//不进入,执行ls
命令
docker attach
与docker exec
的区别详细看我的另一篇博客docker exec 和 docker attach的作用与区别
docker cp 容器ID:/tmp/a.log /root
//把a.log 拷贝到主机/root下思考 :Centos与Ubntu的Linux版本中,bootfs是否相同?
——相同
UnionsFS联合文件系统的优点?
—— 复用,共享资源。
docker commit
提交容器副本,保存修改过后的容器,成为一个新的镜像 .docker commit -m="描述" -a="作者" 容器ID 目标镜像名字:[标签名]
案例学习:
- 输入以下命令(二选一),运行tomcat容器
docker run -it -p 8888:8080 tomcat
(小写p,主机端口:容器端口)
docker run -it -P tomcat
(大写P,随机分配端口)- 运行后,从浏览器输入localhost:8888,查看tomcat效果。
- 从容器中删除“/usr/local/tomcat/webapps/doc”文件,再次查看浏览器中tomcat选择”DOC“发现 notfound。删除效果出现。
- 现在,把这个缺少doc文件的tomcat容器保存为新镜像!
- docker commit -m=“new tomcat” -a=“mynqme” 容器ID newtomcat:tag
- docker run -it -P newtomcat:tag
- 查看发现doc已经不见了!
Tips:目前新版本tomcat容器运行并不能在浏览器查看到主页,大家理解上述过程的意义即可!(如果理解有误欢迎提出)
From :基于**创建
ENV: 配置环境
EXPOSE :暴露端口
CMD :启动
保存容器中数据,数据持久化。容器之间,主机与容器之间,共享数据。相当于挂载!可以使得主机与容器内同步更新!
容器卷的两种使用方式:
1.使用命令,在创建镜像时直接添加容器卷。直接举例说明:
docker run -it -v /主机绝对路径:/容器内目录 镜像名
docker run -it -v /主机绝对路径:/容器内目录:ro 镜像名
只读
2.在dockerfile中编写,使用VOLUME指令
VOLUME["/file1","/file2","/file3"]
//只支持容器内的目录,不支持宿主机目录(为了可移植性)
docker inspect ID
//查看挂载在主机的目录
容器间传递共享:
docekr run --volumes-from 容器名 镜像名
eg: docker run -it --name dc02 --volumes-from dc01 zxd/centos //dc02 与dc01 共享文件!!
//思考:当dc01被kill ,文件是否还存在?——存在,且共享均保持
案例学习:
VOLUME
留下两个容器卷,等待绑定。#volume test
#基于centos创建
FROM centos
#新建两个容器卷
**VOLUME["/datafile1","/datafile2"]**
CMD echo "finished,success1"
#以shell 终端登陆
CMD /bin/bash
build 利用dockerfile生成images
在磁盘中找到上述步骤中的文件,并运行以下命令生成镜像:
例如: docker build -f /root/dockerfile -t dong/mycentos .
注意末尾这里有个空格和点!!
run 运行生成的新镜像
注意这条命令,-v后面的格式: 宿主机目录:容器卷名称 绑定宿主机与刚才留下的两个容器卷!
docker run -it -v /host1:/datafile1 -v /host2:/datafile2 dong/mycentos /bin/bash
改变宿主机中的host1中的文件,容器内datafile1中的文件会同时改变!
- 划重点:
docker build -f /filepath/file -t namespace/name .
编译dockerfile,生成镜像
docker run namespace/name
运行生成的镜像- 步骤三中命令较长,来分析一下:
-it
代表前台运行此容器(否则容器可能启动了一下,你看不到,它自己就关了);
-v
代表绑定容器卷(我们对本机中host1操作容器中的datafile1会同时变化,host2同理);
/bin/bash
代表接下来使用bash语法进行交互。
在dockerfile中,CMD
关键字可以使用多次,可是只有最后一个有效,且会被docker run
之后的参数替换!**
ENTRYPOINT
功能比CMD强大,可以使用多次,docker run
之后的参数会追加上去,不会被替换。
首先你要了解的内容:
小知识:
curl cip.cc
可以用来查ip
curl cip.cc -i
可以用来查带报头的ip
(Windows中的控制台也通用哦)
如果想要使用追加参数需要把ENTRYPOINT
后边的命令写成字符串拼接的方式,
我们分别使用CMD和ENTRYPOINT关键字编写dockerfile,生成两个image(命名为centos-CMD/centos-ENTRYPOINT)。
下面只是两个dockerfile中的不同部分。
ENTRYPOINT ["curl","cip.cc"]
CMD["curl","cip.cc"]
下面,我们看CMD与 ENTRYPOINT的效果:
docker run -it centos-CMD:ip
docker run -it centos-ENTRYPOINT:ip
#此时CMD与 ENTRYPOINT效果相同,均可以查到ip
docker run -it centos-CMD:ip -i
docker run -it centos-ENTRYPOINT:ip -i
#报错!!
此时CMD与 ENTRYPOINT效果是不一样的 ,
而使用ENTRYPOINT生成的镜像,-i
会把追加在命令后边, curl cip.cc -i
使用CMD生成的镜像,-i
会把CMD中的内容都替换掉,curl cip.cc -i
因此报错 !
docker run -p 1234:3306 --name mysql
-v /zxd/mysql/conf:/etc/mysql/conf.d
-v /zxd/mysql/logs:/logs
-v /zxd/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
-d mysql:5.6
命令解析:
docker run
#设置端口,宿主机端口为1234(可自定义),容器内端口为3306(固定不可变)
-p 1234:3306 --name mysql
#创建配置的容器卷(三个)
-v /zxd/mysql/conf:/etc/mysql/conf.d
-v /zxd/mysql/logs:/logs
-v /zxd/mysql/data:/var/lib/mysql
#设置密码
-e MYSQL_ROOT_PASSWORD=123456
#后台启动镜像
-d mysql:5.6
使用docker ps
查看容器id
用docker exec -it ID /bin/bash
进入容器
使用mysql -uroot -p
进行内部数据库操作
也可通过本机的ip:1234端口来连接数据库
注意,由于docker中不能使用ifconfig查看ip,可以使用
cat /etc/hosts
查看ip
到这里,本教程就接近尾声了,如果有疑问或者错误的地方感谢指出!你,学fei了吗?!
下面补充一些面试遇到的问题:(都是血淋淋的教训)
。。。