# 官方提供@yunTaoScripts Docker 开源的应用容器引擎 🔥🔥
让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。
# docker 容器运行时
高级别 运行通过调用低级别运行时实现管理容器。高级别运行时管理的镜像是可以通用的,是因为他们都遵守oci 。
OCI 是什么? 开放容器标准
OCI,Open Container Initiative,是一个轻量级,开放的治理结构(项目),在 Linux 基金会的支持下成立,致力于围绕容器格式和运行时创建开放的行业标准。OCI 项目由 Docker,CoreOS(后来被 Red Hat 收购了,相应的席位被 Red Hat 继承)和容器行业中的其他领导者在 2015 年 6 月的时候启动。OCI 的技术委员会成员包括 Red Hat,Microsoft,Docker,Cruise,IBM,Google,Red Hat 和 SUSE,其中 Docker 公司有两名成员,且其中的一位是现任主席,
- 高级别runtime,能够管理容器和镜像
- Docker
- podman
- containerd
- rkt
- cri-o
- 低级别runtime,只能管理容器
- runc
- lxc
- gvisor
- kata
docker podman containerd 高级别默认调用 runc
# docker 安装
参见-----> 安装docker
# docker 镜像管理
默认镜像名称
docker pull nginx
dokcer pull docker.io/library/nginx:latest # 完整镜像名称
服务器地址/分类 / 名称:版本
docker pull 镜像
docker tag 镜像
docker rmi 镜像
docker save 镜像名 > filename.tar
docker load -i filename.tar
# 把容器导出为镜像
docker export 容器名 > filename.tar
# 导入
cat filename.tar | docker import - 镜像名
# -a 作者信息, -m 提交信息 , id 是容器id ,最后是到处镜像名
docker commit -a "aa" -m "bb" 6a785f2adc9d test:v2
docker history xxxx --no-trunc 可以显示完整的内容
- Openshift 提供S2I
source to image
save、export、commit的区别
命令 | 作用 | 应用场景 | 相同点 | 区别 |
---|---|---|---|---|
docker export/docker import | 导出容器到一个文件 | 迁移容器 | 都可以创建镜像 | 不带历史,基于 容器创建 |
docker save/docker load | 导出镜像到指定文件 | 分享镜像 | 都可以创建镜像 | 带历史,基于镜 像创建 |
docker commit | 基于容器创建镜像 | 创建新的镜像 | 都可以创建镜像 | 保存历史合并新 层,,基于容器创 建 |
# docker 容器管理
- 运行容器
docker run镜像 ---最简单的一个容器
docker run -it --rm hub.c.163.com/library/centos /bin/bash
docker run -dit -h node --name=c1 镜像名 命令
docker run -dit --restart=always 镜像名 命令
docker run -dit --restart=always -e 变量1=值1 -e 变量2=值2 镜像
- 管理容器的常见命令
docker exec xxxx 命令
docker start xxxx
docker port xxxx # 查看映射端口
docker stop xxxxx
docker restart xxxxx
docker top xxxxx
docker logs -f node
docker inspect 容器
# docker 数据卷管理
docker run -dit --restart=always -v p_path1:c_path2 镜像名 命令
docker run -dit --restart=always -v c_path2 镜像名 命令
- 文件夹只读
docker run -dit --restart=always -v p_path1:c_path2:rw 镜像名 命令
docker run -dit --restart=always -v p_path1:c_path2:ro 镜像名 命令
路径写法说明
- -v 只写一个路径,默认指容器路径,映射路径是随机物理机路径。
- -v 写两个路径,第一个是物理机路径,第二个是容器路径。
# docker 自定义镜像
yum install epel-release
# 书写Dockerfile
FROM centos:centos7.9.2009
MAINTAINER yuntao
RUN rm -rf /etc/yum.repos.d/*
ADD repo.tar /etc/yum.repos.d/
RUN rm -f /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/kubernetes.repo
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-*
RUN yum install epel-release -y
RUN yum install -y nginx
EXPOSE 80
CMD ["nginx", "-g","daemon off;"]
COPY 和 ADD的区别
- COPY和ADD的意思是一样
- ADD带有自动解压功能 COPY没有自动解压功能
# 优化 Dockerfile
>> 请看这里 👆🏻<<
# 通过 Dockefile 创建镜像
docker build -t v4 . -f filename
docker build -t v4 .
# 创建可以ssh的centos镜像
FROM centos:v1
MAINTAINER duan
RUN rm -rf /etc/yum.repos.d/*
ADD epel.repo /etc/yum.repos.d/
ADD CentOS-Base.repo /etc/yum.repos.d/
RUN yum install openssh-clients openssh-server -y
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key RUN
sed -i '/UseDNS/cUseDNS no' /etc/ssh/sshd_config
RUN echo "root:redhat" | chpasswd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
# docker 网络管理
docker network list
docker network inspect 6f70229c85f0
docker network list
man -k docker
man docker-network-create
docker run --network host --rm -it centos /bin/bash # 使用宿主机网络空间
docker network create -d bridge --subnet=10.0.0.0/24 mynet
docker run --net=mynet --rm -it centos /bin/bash
docker run -dit -p 物理机端口:容器端口 镜像
# 容器互联
# 先创建一个容器
docker run -it --rm --name=h1 hub.c.163.com/library/centos
再创建一个容器h2,和h1通信有两种方式
docker inspect h1 | grep -i ipaddr
• docker run -it --rm --name=h2 centos ping 172.17.0.2
• docker run -it --rm --name=h2 --link h1:h1 centos ping h1
# lab-搭建一个wordpress博客
docker run -dit --name db --restart=always -e MYSQL_ROOT_PASSWORD=redhat -e MYSQL_DATABASE=wordpress mysql
docker run -dit --name blog --restart=always -e WORDPRESS_DB_HOST=172.17.0.2 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=redhat -e WORDPRESS_DB_NAME=wordpress -p 80:80 wordpress
docker run -dit--name blog --link=db:mysql -p 80:80 wordpress
# 配置docker本地仓库
docker pull registry
docker run -d --name registry -p 5000:5000 --restart=always -v /myreg:/var/lib/registry registry
docker login http://harbor.yuntao.work:300 -u xxxxx
# docker使用本地仓库
cat /etc/docker/daemon.json {
"registry-mirrors": ["https://frz7i079.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.26.70:5000"]
}
curl http://10.211.55.111:5000/v2/_catalog
docker push 192.168.26.70:5000/rhce/busybox
docker pull 192.168.26.70:5000/rhce/busybox 或者
curl -XGET http://192.168.26.70:5000/v2/_catalog
curl -XGET http://192.168.26.70:5000/v2/rhce/nginx/tags/list
# 对容器内存的限制
docker run -it --rm --name=yuntao -m 1g centos:centos7.9.2009 bash
# 对容器CPU的限制
# 限制cpu 跑在哪个核心上
docker run -it --rm --name=yuntao --cpuset-cpus=0 centos:centos7.9.2009 bash
cat /dev/zero > /dev/null
# 查看 运行在哪个核心
ps mo pid,comm,psr
← 快速链接 K8S 快速搭建 🔥🔥 →