1.docker安装
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
1.docker安装
a.卸载旧版本的docker
$ yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
b.安装所需要的安装包
$ yum install -y yum-utils
c.设置镜像仓库
$ yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
d.更新yum包索引
$ yum makecache fast
e.安装docker相关(dokcer-ce-社区版 -ee 企业版)
$ yum install docker-ce docker-ce-cli containerd.io
f.启动docker
$ systemctl start docker
d.测试是否安装成功
$ docker version
e.测试helloworld
$ docker run hello-world
f.查看helloworld是否启动成功
$ docker images
e.(了解)卸载docker
$ yum remove docker-ce docker-ce-cli containerd.io 卸载依赖
$ rm -rf /var/lib/docker 删除资源(docker默认资源目录)
2.阿里云镜像加速
阿里云镜像服务有详细教程
3.docker的常用命令
帮助命令
docker version #显示dokcer的版本信息
docker info #显示docker系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
镜像命令
docker images #查看主机上所有的镜像
#可选项
-a, --all #列出所有镜像
-q, --quiet #只显示镜像id
docker search mysql #在docker hub 搜索镜像
#可选项
--filter=STARS=3000 #搜索3000以上点赞的镜像
docker pull mysql #下载最新版的镜像
docker pull mysql:5.7 #下载指定版本的镜像
docker rmi -f 容器id #通过镜像id删除镜像
docker rmi -f 容器id 容器id 容器id #通过镜像id删除多个镜像
docker rmi -f $(docker images -aq) # docker images -aq 查出当前所有的镜像
#删除所有的镜像
容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个centos来测试学习
#拉取centos最新镜像
docker pull centos
#新建容器并启动
docker run [可选参数] image
#参数说明
--name="Name" #指定容器名字,可以区分容器
-d #后台方式启动
-it #交互模式启动,可以进入容器与容器交互,查看容器内容
-p #指定容器端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (常用)
-p 容器端口
容器端口
-P #随机指定端口运行
#交互模式启动容器并进入容器
docker run -it --name="one" centos /bin/bash
#查看正在运行的容器
docker ps
#查看正在运行的容器和运行过的容器
docker ps -a
#查看醉经创建的容器(可以指定条数)
docker ps -a -n=1
#查看醉经创建的容器(可以指定条数)
docker ps -a -n=1
-q 只显示容器id
#容器停止并退出(在容器内使用)
exit
#容器不停止并退出(在容器内使用)
Ctrl + P + Q
#删除容器(不能删除正在运行的容器)
docker rm 容器id
#删除所有容器
docker rm -f $(docker ps -aq)
docker ps -a -q|xargs docker rm
启动,停止和重启容器
docker start 容器id #启动容器
docker stop 容器id #停止容器
docker restart 容器id #重启容器
docker kill 容器id #杀死容器
常用的其他命令
后台启动容器
docker run -d 容器名字 #后台启动容器 ---问题:启动之后查询正在运行的容器,发现其停止了
#原因:docker后台运行必须有一个前台应用,不然docker发现没有应用就会停止该容器:如---》后台启动nginx,发现没有提供服务,便“自杀了”
查看日志
docker logs -f -t -tail 10 容器id #查询指定容器的前十条日志
# -f 查看全部日之
# -t 显示时间戳
# -tail 指定显示的日之条数
查看容器内部的进程信息
docker top 容器id
查看镜像源数据
docker inspect
进入当前正在运行的容器
#我们都是通过后台方式启动容器的,需要进入容器修改有些配置
#命令
#方式一
docker exec -it 容器id /bin/bash
#方式二
docker attach 容器id
#区别
docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach 进入容器正在运行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:/容器路径/文件名称 /主机路径
#拷贝是一个手动操作,未来我们使用 -v 卷的技术可以实现自动同步 比如容器内的/home和主机的/home同步
commit镜像
docker -a="作者" -m="提交信息说明" 容器id 容器名字:版本号
3.docker数据卷技术
简述:简而言之就是容器的持久化技术和和同步操作,容器间可以共享数据
docker run -it -v 主机目录:容器内目录 镜像名称 /bin/bash
#这样启动相当于把主机目录和容器内的目录相互绑定起来
#我们以后修改配置文件可以直接在主机内修改,修改之后会自动同步到容器内部
实战mysql
1.思考MySQL持久化的问题
a.获取镜像
docker pull mysql:5.7
注意:
1.运行容器。需要做数据挂载
2.运行容器,需要指定数据库密码
官方运行命令
$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
启动我们的mysql
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name="mysqltest" mysql:5.7
# -d 是指定后台运行
# -p 指定与主机映射的端口号
# -v 指定容器卷的挂载目录(支持多个)
# -e 追加参数(MYSQL_ROOT_PASSWORD------指定mysql的用户名和密码)
启动成功之后,即可连接测试
具名挂载和匿名挂载
1.匿名挂载
-v 容器内路径
# 只指定了容器内部的目录,没有指定容器外的路径
docker run -d -P --name="nginx01" -v /etc/nginx nginx
#查看所有卷的列表
docker volume ls
#查看所有卷的详细信息(包括路径)
docker volume inspect 卷名
2.具名挂载
#只指定了容器内部的目录和卷的名字,没有指定容器外的路径
docker run -d -P --name="nginx01" -v 卷名:/etc/nginx nginx
**所有没有指定主机目录的情况下都是存在
/var/lib/docker/volumes/卷名/_data
在这个目录,我们通过具名挂载可以很方便的找到我们的卷,并且是我们大多数时间使用的
**
拓展
# 通过 -v 容器内的路径:ro rw 改变读写权限
# ro read only 只读
# rw read write 可读可写 -- 默认的
docker run -d -P --name="nginx01" -v 卷名:/etc/nginx:ro nginx
docker run -d -P --name="nginx01" -v 卷名:/etc/nginx:r2 nginx
#ro 看到ro就说明容器内的这部分内容是无法操作的,只能通过主机来操作这些数据
数据容器卷
实现多个mysql数据同步!!!!!!!!!!!!!!!
3.DockerFile
dockerfile是用来构建镜像的文件!是命令参数脚本
构建步骤
1.编写一个dockerfile文件
2.docker bulid 构建一个镜像
3.docker run 启动一个镜像
4.docker push 发布一个镜像(可以发布到dockerhub 或者 阿里云镜像仓库)
注意:官方很多镜像都是基础镜像,如centos,很多功能都没有,我们也可以自己制作自己所需要的镜像
如:我们搭建java环境 ---- 需要centos+jdk+mysql+redis等等,我们就就可以通过dockerfile来直接构建我们自己的镜像
a.dockerfile构建过程
基础知识 :
1.每个保留关键字(指令)都必须是大写
2.执行顺序都为从上往下
3.# 表示注释
4.每一个指令都会提交一个新的镜像层,并提交
docker是面向开发的,我们以后需要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单
步骤 开发,部署,运维缺一不可
DockerFile : 构建文件,定义了一切步骤,相当于源代码
DockerImages :通过dockerfile生成的镜像,最终发布和运行的产品
Docker容器: 容器是镜像运行起来提供服务的
b.DockerFile的指令
FROM #基础镜像,一切从这里开始
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建时需要运行的命令
ADD #步骤:tomcat镜像,这个镜像的压缩包,添加内容
WORKDIR #镜像的工作目录
VOLUME #镜像挂载数据卷的目录
EXPOST #保留端口配置
CMD #指定这个容器启动时需要运行的命令,只有最后一个生效,会被替代
ENTRYPOINT #指定这个容器启动时需要运行的命令,可以追加命令
ONBULID #当构建一个被继承的dockerfile ,这个时候会运行ONBULID的指令,触发指令
COPY #类似ADD,将我们的文件拷贝到镜像中
ENV #构建的时候配置环境变量
实战测试1
1.创建一个自己的centos
vim mydockerfile
FROM centos
MAINTAINER zhangshuai<852096130@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "--- end -----"
CMD /bin/bash
2.通过这个文件来构建我们的镜像
docker build -f dockerfile文件路径 -t 指定生成的镜像名:[版本] .
# -f 指定构建的dockerfile文件
# -t 指定生成的镜像名字【版本】
############# 最后有一个 . 别忘记了
3.测试运行
4.查看docker镜像的构建历史
docker history 镜像ID
#可以查看镜像的详细构建过程
实战测试2
安装tomcat镜像
1.准备镜像文件tomcat压缩包和jdk压缩包
2.编写dockerfile文件
FROM centos
MAINTAINER zhangshuai<852096130@qq.com>
COPY readme.text /usr/local/readme.text
ADD jdk-8u161-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_161
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usl/local/apache-tomcat-9.0.22/bin/logs/catalina.out
3.构建镜像
**编写Dockerfile时,官方命名是Dockerfile,build会自动寻这个文件,就不需要- f指定dockerfile文件了
**
docker build -t 指定镜像名字:版本
4.启动镜像
docker run -d -p 9090:8080 --name zhangshuaitomcat4 -v /home/zhangshuai/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/zhangshuai/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.22/logs mytomcat
3.发布自己的镜像
A.提交到dockerhub
1.进入dockerhub登陆自己的账号(如果没有就注册)
2.在服务器上登陆自己的账号
docker login -u 你的账号 你的密码
3.提交我们的镜像
docker push 作者名字/镜像名字:版本号
docker tag b06b6c11ff07 zhangshuai/tomcat:1.0
#更改镜像的名字和版本
A.提交到阿里云镜像服务
1.登陆阿里云
2.找到容器镜像服务
3.创建命名空间
4.创建容器镜像
5.发布镜像
1. 登录阿里云Docker Registry
$ sudo docker login --username=852096130zs registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
2. 从Registry中拉取镜像
$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/zhangshuai-mingming/zhangshuainiubi:[镜像版本号]
3. 将镜像推送到Registry
$ sudo docker login --username=852096130zs registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/zhangshuai-mingming/zhangshuainiubi:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/zhangshuai-mingming/zhangshuainiubi:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
4. 选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。
5. 示例
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB
$ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用 "docker push" 命令将该镜像推送至远程。
$ sudo docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816