Docker基础学习笔记

都是自己看视频学习资料总结的,欢迎大家浏览指正
勿在浮沙筑高台

仓库 镜像 容器

1.基于Go语言实现的云开源项目
2.解决运行环境和配置问题的软件容器虚拟化技术
3.一次封装构建,到处运行
4.不需要一整套操作系统
5.相互隔离,耦合度低
大海:宿主机
鲸鱼:docker
集装箱:容器  ---> 容器来自镜像

面试造飞机,工作拧螺丝

高手是练出来的,不是教出来的

烧不死的鸟才叫凤凰




Docker简介

仓库 镜像 容器

解决运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

Docker打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

理念:“一次封装,到处运行”

虚拟机和容器的不同:

1. 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;

2.而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

3. 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

Docker 常用命令

1.1帮助命令

docker version
docker info
docker --help

1.2镜像命令

1.2.1查看本地镜像

docker images 
-a:列出本地所有的镜像  -q:只显示镜像ID 

1.2.2搜索镜像

docker search xx镜像名

1.2.3下载镜像

docker pull xx镜像名
例子:docker pull tomcat:latest  #后面不指定标签默认latest

1.2.4删除镜像

docker rmi -f 镜像ID
例子:
    docker rmi -f 镜像id      #删除一个
    docker rmi -f 1镜像id 2镜像id  #删除多个
    docker rmi -f $(docker images -qa)   #全部删除

1.3 容器命令

有镜像才能创建容器,先pull一个镜像

1.3.1 新建并启动容器

凡是设置了名字的都可用名字代替id使用

docker run 镜像名
-it:常用 -d:后台运行容器 -P:随机端口映射
-p:指定端口映射     
    ip:hostPort:containerPort
    ip::containerPort
    hostPort:containerPort  #常用
    containerPort
例子:
    docker run -it centos
    docker run -it --name '自定义容器名'  镜像id
    #【docker run -it --name '容器name' centos】
    docker run -d centos  #后台运行的容器要有一个前台进程,不然用ps会显示退出状态
    docker run -it -P tomcat #随机分配端口
    docker run -it -p 主机端口:容器端口
    #【docker run -it -p 9527:8080 tomcat】

1.3.2 列出运行的容器

docker ps 
-a:列出所有容器,包括关闭的
-n:指定显示n个容器
-q:只显示容器编号
例子:docker ps -n 3  #显示最近3个容器

1.3.3 退出容器

exit #退出并停止
Ctrl +pq #退出不停止

1.3.4 启动和重启容器

docker start 容器名或容器id
docker restart 容器名或容器id

1.3.5 停止容器

docker stop 容器名或容器id

1.3.6 进入容器

docker attach 容器id
docker exec -it 容器id bash/shell
#exec -it 相当于【隔山打牛】,在容器外面对里面进行相应命令操作
例子:docker exec -it d27c53468bd1  bin/bash
    docker exec -it d27c53468bd1 ls -a

1.3.7 容器内容拷贝到主机

docker cp 容器id:容器绝对路径 目的主机路径

1.3.8 彻底删除容器

docker rm -f 容器id   #删除一个指定的容器
docker rm -f $(docker ps -qa)   #全部删除

1.3.9 查看容器日志

docker logs -f -t --tail 容器id
-t :加入了时间戳  -f : 跟随最新的日志打印 --tail 数字 显示多少条

1.3.10 查看容器内运行的进程

docker top 容器id

1.3.11 查看容器内部细节

docker inspect 容器id

build 通过dockerFile定制镜像 commit 提交当前容器为新的镜像

Docker镜像

什么是docker镜像?

UnionFS(联合文件系统) 洋葱 方便共享资源 镜像是分层的,如同千层饼

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统叫UnionFS。

Docker镜像的最底层是bootfs ,对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了 ,所以docker里面的centos才200M

docker commit -m='描述信息' -a='作者' 容器id 创建目标镜像名:[版本号标签名]
例子:docker commit -m= '删除tomcat' -a='liu' d521565easd haha:1.2

Docker容器数据卷

持久化 容器间继承 数据共享 类似redis中的rdb和aof

1.1 直接命令添加

一对一

docker run -it -v 主机绝对路径:容器绝对路径  镜像名
例子:docker run -it -v /haha:/liu centos 

    #目录有则进入,没有则自动建立,和容器里面的文件夹关联,就是我,我就是你,只是名字不同,操作的是同一个
    #【相当于共享同一个文件,一方更改都会给另一半带来影响】
    #哪怕容器关闭了,主机修改了,一开机自动同步更改,共享。这才叫持久化
    
docker run -it -v /宿主机绝对路径:/容器目录:ro 镜像名    #修改容器权限只读,主机单项操作

docker inspect 容器id #查看相关信息

1.2 通过dockerFile添加

volume指令添加多个 一对多 镜像的构建文件 一个脚本

  • 第一步:在主机先写dockerFile脚本 没有后缀名
  • 第二步:将DockerFile文件build成镜像-f指明文件位置 -t命名
FROM centos  #来自于centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]  #在容器里新建两个容器卷
CMD echo "finished,--------success1"  #执行这个命令
CMD /bin/bash    #习惯性带上这个
#######################编写上面的dockerfile文件####################################
翻译:↓
【docker run -it -v /host:/dataVolumeContainer1 -v host:/dataVolumeContainer2 centos /bin/bash】
########################执行下面build的指令########################################
docker build -f /home/dockerfile -t liu .  
docker build -f /home/dockerfile -t liucentos:1.1  . #:后版本号,不写默认latest
-f:指明这个Dockerfile文件在哪
-t:命名空间 【最后还有一个.】
.:指当前目录
docker inspect 容器id #查看和主机绑定共享的文件夹
1575351120245.png
  • --volumes-from继承
docker run -it --name '自定义容器名'  --volumes-from '继承的容器的名字' 镜像名
例子:docker run -it --name 'b2' --volumes-from 'bc1' liu

1.3 dockerFile文件详解

scratch 祖先镜像

from #来自哪个镜像
maintainer #作者+邮箱
run #构建时需要执行的命令
env #环境变量
expose #暴露的端口号
workdir #登录进来后的默认工作目录
copy  #拷贝进去
add   #拷贝+解压缩*
volume #保存数据和持久化目录
cmd   #启动时要运行的命令,多个命令则覆盖
entrypoint  #入口点和cmd含义一样,多个命令则追加*
onbuild   #继承则触发
案例 1 :

也可用列表的方式执行命令 CMD ['curl','-s','https://ip.cn']

  • 第一步:先在主机新建一个Dockerfile文件,内容如下:
from centos  #来自于centos
maintainer [email protected] #作者
env mypath /tmp #环境变量
workdir $mypath #一进来落脚点改成tmp
run yum -y install vim #安装vim
run yun -y install net-tools  #安装网络相关工具
expose 80
cmd echo $mypath
cmd echo '成功'
cmd /bin/bash
  • 第二步:用build命令将文件打包成镜像
docker build -f /home/dockerfile -t liucentos:1.1  . 
#  :后为版本号,不写默认latest
# . 代指当前目录
# -f:指明Dockerfile文件目录
# -t:命名镜像名
  • 第三步:成功后用run运行
案例 2:
FROM centos
RUN yum install -y curl
#CMD [ "curl", "-s", "https://ip.cn" ]
ENTRYPOINT ['curl','-s','https://ip.cn'] 
2.png

常用安装

1.1 安装运行Mysql

docker pull mysql:5.6  #拉取5.6版本
#docker run -it -v 主机绝对路径:容器绝对路径  镜像名
docker run -p 12345:3306 --name mysql 
-v /zzyyuse/mysql/conf:/etc/mysql/conf.d 
-v /zzyyuse/mysql/logs:/logs 
-v /zzyyuse/mysql/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
################################################################## 
命令说明:
-p 12345:3306:将主机的12345端口映射到docker容器的3306端口。
--name mysql:运行服务名字
-v /zzyyuse/mysql/conf:/etc/mysql/conf.d :将主机/zzyyuse/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d
-v /zzyyuse/mysql/logs:/logs:将主机/zzyyuse/mysql目录下的 logs 目录挂载到容器的 /logs。
-v /zzyyuse/mysql/data:/var/lib/mysql :将主机 xxx 目录下的data目录挂载到容器的 xxx
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
-d mysql:5.6 : 后台运行

1.2 安装运行redis

docker pull redis:3.2
docker run -p 6379:6379 
-v /zzyyuse/myredis/data:/data 
-v /zzyyuse/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf 
-d redis:3.2 redis-server /usr/local/etc/redis/redis.conf 
--appendonly yes

推送到阿里云

1.运行容器:docker run -it test
2.提交到本地镜像:docker commit -a '作者' -m '提交信息' 运行容器的id 自定义镜像名字
#例子 docker commit -a 'liu' -m 'testip' asdfas234234 myip:1.1
3.登录阿里云账号创建镜像仓库
    依次执行下面三行代码:
    $ sudo docker login --username=ykcc归 registry.cn-qingdao.aliyuncs.com
    $ sudo docker tag 镜像id registry.cn-qingdao.aliyuncs.com/test6679321/myip:镜像版本号
    $ sudo docker push registry.cn-qingdao.aliyuncs.com/test6679321/myip:镜像版本号
4.在仓库搜索自己推送的镜像
2.gif

你可能感兴趣的:(Docker基础学习笔记)