挖坑记录~docker基础

概念

docker是容器虚拟化技术的一种, 对虚拟化容器进行了封装, 采用cs架构, 根据客户端命令操作docker实现对容器/镜像的维护

镜像

模板

容器

根据模板创建的一个具有基本linux环境的实例

仓库

docker hub, 镜像仓库, registry包含多个仓库

容器与虚拟机虚拟化区别

容器 虚拟机
基于宿主机系统 虚拟化基于硬件
系统仅支持宿主机同内核系统 系统与宿主机无关
体积小 体积大
共用内核启动快 构建内核启动慢

环境搭建

以下操作需要全程联网
以centos7作为虚拟机系统

virtualbox

下载
https://www.vagrantup.com/downloads.html

vagrant

下载
https://www.virtualbox.org/wiki/Downloads

  1. 初始化centos7系统
  2. 启动系统
    可以切换到root 用户, vagrant生成的root用户密码也是vagrant, 不然下面输的某些命令需要加sudo
  3. 网络配置
    vagrant初始化的系统不带有ip, 需要配置宿主系统与虚拟系统的端口映射, 需要将外部访问虚拟系统的请求由宿主机转发到 虚拟机的端口. 每个服务的端口都需要进行映射. 建议给虚拟机分配默认ip
    命令终端输入 ipconfig, 查看虚拟机ip
    在这里插入图片描述然后去修改vagrant文件
C:\Users\你的用户名\Vagrantfile

在这里插入图片描述
此处的地址的网段与虚拟机ip相同, 末位任意

config.vm.network "private_network", ip: "192.168.56.10"

修改完后重启虚拟机,

vagrant reload

之后用宿主机和虚拟机互相ping一下确认网络
4. 确认安装gcc
yum -y install gcc
5. docker安装
确认操作系统版本, centos6/7安装稍有不同
docker官方文档
https://docs.docker.com/engine/install/centos/#uninstall-old-versions
这一步推荐使用阿里云镜像
在这里插入图片描述

sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

docker安装完成后, 需要配置国内镜像站, 加快镜像拉取上传速度

在这里插入图片描述
在这里插入图片描述
直接复制以下命令在虚拟机中执行
在这里插入图片描述

docker操作

启动docker
sudo systemctl start docker
测试
sudo docker run hello-world
配置docker开机启动
sudo systemctl enable docker

常用命令

docker images
docker info
docker version
docker --help

镜像命令

命令 说明
docker images 镜像列表
docker search tomcat(镜像名称) 根据名称从仓库中查询镜像
docker pull tomcat(镜像名称):3.2(标签版本) 拉取镜像
docker rmi tomcat 删除镜像

容器命令

命令 说明
docker run -it --name adsfadsf(镜像id) 根据镜像id新建并启动容器
-it 以交互模式启动容器, 并启动一个伪终端
- -name 为容器指定一个名称
docker ps -n 3 显示当前运行3个容器
-n 3 展示数量
exit 关闭并退出当前容器
ctrl+p+q 不关闭退出容器,容器仍在运行
docker stop id/name 根据容器id或者名称停止容器
docker start id/name 根据容器id或者名称启动容器
docker kill 强制停止
docker rm id/name 删除容器
docker run -d

守护进程方式后台启动容器, 与-it不同, 不会提供终端, 受docker机制影响因为容器没有事做, 会立即退出

docker logs -t -f --tail 3 id

根据id查看容器的运行日志,
-t 附带时间戳
-f 循环
–tail 从尾部


查看该容器的内部细节, 已json方式展示

docker -inspect id 

直接进入容器, 不会启动新的进程

docker attach id

不进入容器, 将容器中执行的命令结果返回到宿主机终端
docker exec id 命令

docker cp id /容器路径 文件名 /宿主机路径 

将容器中的文件拷贝到宿主机


开机时容器自动启动

docker update 容器名 --restart=always

镜像

虚拟机的镜像由unionFS联合文件系统构成, 分为bootsFS 与rootFS, bootsFS中包含kernel内核, 启动时将内核加载到rootFS中, rootFS为root根目录的文件结构
与虚拟机的镜像不同, docker镜像不包含内核, 仅有rootFS, 所以体积小

镜像中包含不同的镜像, 比如tomcat镜像基于jdk, jdk基于centos, centos基于kernel, 采用这种结构, 可以实现其他镜像共享相同镜像, 当拉取es时, 因为es同样基于jdk, 可以共用jdk镜像.

镜像命令

docker run -it -p 8888:8080 id

启动容器并配置端口映射, 容器相当于一个linux系统, 内部也有网络/端口, 通过宿主机访问容器中的服务时, 需要进行端口映射, 8888为宿主机端口, 8080为容器端口, 宿主机中访问8888时, 就会访问到容器中的tomcat服务
端口映射概念补充
例如现在有3个系统, 一个是笔记本上启动的, 一个是安装在virtualbox上的虚拟机centos7, 还有一个就是启动后的容器, 因为虚拟机已经配置了静态ip192.168.56.xx, 所以windows可以直接通过这个地址访问虚拟机上的服务, 但是容器没有配置静态ip, 需要通过端口映射, 才能访问到容器中运行的服务, 比如现在想通过window访问一个启动的tomcat, 根据这run命令, windows浏览器中通过192.168.56.xx:8888就可以访问到

docker commit  -m="memo提交的描述信息" -a="(author作者)" 容器id 新镜像名 :[标签版本号]

已一个运行容器为模板, 创建一个镜像, 当然, 本地也会存在这个镜像

数据卷

作用:

  1. 将容器的数据进行持久化保存
  2. 容器与容器之间的数据同步

命令

docker run -it -v /宿主机绝对路径 : /容器内目录  镜像名

例docker run -it -v /host/temp : /container/temp mycentos
-v volume数据卷缩写
将主机中/host/temp目录与容器/container/temp目录中的内容同步, 包含执行前的内容, 如果没有该文件夹将创建
可通过docker inspect 查看valume对象中的内容

因为已经改变了容器的配置文件, 就算容器关闭退出, 下次重启后同步仍生效
这个命令是启动一个新的容器并追加数据卷


docker run -it -v /宿主机绝对路径 : /容器内目录:ro  镜像名

:ro 为仅赋予容器方数据卷readonly权限
对同一目录执行, 将会覆盖之前的数据卷的配置


数据卷的传递

docker run -it --name doc2 --volumes -from doc1 镜像名

启动doc2容器, 并与doc1容器建立数据卷关系
已经建立的数据卷关系, 及时有一个容器关闭删除, 其他配置了的数据卷的容器仍会保持数据卷关系

dockerfile

dockerfile是用来构建镜像的脚本, 通过docker的编译命令可以生成镜像文件, 类似java的class文件

查看docker hub中tomcat的dockerfile

https://github.com/docker-library/tomcat/blob/22269be2cf23e1f7b17331a90db4f4ed9c9d1f65/8.5/jdk8/openjdk/Dockerfile

创建dockerfile

vim Dockerfile
例使用该内容通过dockerfile配置数据卷
文件内容:
#volume test //
FROM centos //基于centos镜像
VOLUME["/dataVolumeContainer1","/dataVolumeContainer2"] //容器卷目 ,该无法固定宿主机路径,使用默认路径,同步容器间的数据卷
CMD echo "finished,success"
CMD /bin/bash

dockerfile有编写格式与解析要求
每条保留字指令需要大写, 最后一个单词是一个参数变量;
每执行一行命令, 都会创建一个新的镜像并基于上一个镜像进行提交;


保留字
ADD 添加一个文件并针对文件类型进行处理, url解压tar包
CMD 执行命令 , 仅处于末位的一个生效 可通过[“xxx”,“xxx”]执行多个命令
FROM 基于哪个镜像
MAINTAINER 作者和邮箱
RUN 执行其他命令 比如yum xxx
EXPOSE 开放端口
WORKDIR 容器启动后终端所在的目录
ENV environmentValue 环境变量 定义一个变量, 下文可以使用$进行引用
COPY 添加一个文件
ENTRYPOINT 执行命令, 不会像CMD一样仅最后一项生效
ONBUILD 类似回调函数, 构建镜像时触发父镜像的onbuild
VOLUME 数据卷


docker build -f /文件路径 -t  新镜像名
-f 应该是find的意思
-t 提供终端界面

docker history id 查看镜像的build历史记录

entrypoint 和cmd区别
容器启动时 在最后可以执行命令 touch 123.txt, 如果dockerfile文件中的命令是cmd执行的, 那么启动容器时, 将会自动执行 cmd touch 123.txt ,而且会覆盖之前的cmd命令, entrypoint就不会

常用软件启动命令

斜杠\ 是换行符 表示命令未完结 , 需要空格+换行符+回车,才能有效

mysql

docker run -p 3306:3306 --name mysql \ 
-v /mydata/mysql/log:/var/log/mysql \ 
-v /mydata/mysql/data:/var/lib/mysql \ 
-v /mydata/mysql/conf:/etc/mysql \ 
-e MYSQL_ROOT_PASSWORD=root \ 
-d mysql:5.7 

redis

docker run -p 6379:6379 --name redis \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /data:/data \
-d redis redis-server /etc/redis/redis.conf

activeMQ

 docker run -d --name activemq -p 61617:61616 -p 8162:8161 webcenter/activemq

开机自启动

docker update 容器名 --restart=always

已交互方式进入容器

docker exec -it activemq(容器名) /bin/bash

查看容器日志, 用来排障

docker logs 容器

猜你喜欢

转载自blog.csdn.net/weixin_43453109/article/details/107630897