下载阿里云base源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirros.aliyun.com/repo/Centos-7.repo
通过yum安装epel源
yum install -y epel-release
查看可安装的docker版本信息
yum list docker --show-duplicates
安装 yum-utils工具
yum install -y yum-utils
添加docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
重新查看可安装的docker版本信息
yum list docker --show-duplicates
安装最新版本的docker
yum install -y docker or yum install -y docker-ce.x86_64 3:19.03.13-3.el7 安装指定版本
配置docker_daemon.conf
PS:国内镜像源需要改为daemon.conf而并非daemon.json
{
"graph": "/data/docker",
"storage-driver": "overlay2",
"insecure-registries":["registry.access.redhat.com","quay.io"],
"registry-mirrors":["https://q2gr04ke.mirror.aliyuncs.com"],
"bip":"172.7.5.1/24",
"exec-opts":["native.cgroupdriver=systemd"],
"live-restore":true
}
开机启动并启动docker
systemctl enable --now docker
检查docker版本信息
docker info
启动第一个容器
docker run hello-world
登录hub.docker.com命令
docker login docker.io
解密密码
cat /root/.docker/config.json --auth:base64加密密码,可解密
echo "eXlsaWtlMTY6eXlsaWtlMTYuMTIz"|base64 -d"
搜索镜像
docker search alpine
下载镜像
docker pull alpine
下载指定版本镜像
docker pull alpine:3.10.3
下载指定版本镜像使用完全路径:生成环境使用
docker pull docker.io/library/alpine:3.10.1
查看镜像
docker images ls
给指定镜像打标签
docker tag 965ea09ff2eb docker.io/ts/alpine:v3.10.3
推送镜像:命名尽量不要太简单避免重复标签名重复无法上传!
docker push docker.io/ts/alpine:v3.10.3
再次给镜像打标签
docker tag 965ea09ff2eb docker.io/ts001/alpine:v3.10.3
再次推送镜像:推拉镜像默认走https协议
docker push docker.io/ts001/alpine:v3.10.3
删除标签
docker rmi docker.io/ts001/alpine:v3.10.3
强制删除镜像
docker rmi -f 965ea09ff2eb
----------
登录registry
docker login docker.io
查找镜像
docker search alpine
拉去镜像
docker pull alpine
拉取指定版本镜像
docker pull alpine:3.10.1
列出本地镜像
docker images|docker image ls
给镜像打标签
docker tag ${image_id}${tag}
推送镜像
docker push docker.io/stanleyws/alpine:3.10.1
删除镜像(删除标签)
docker rmi ${image_id}|docker rmi ${image_name}
-----
docker镜像特性
docker镜像位于bootfs之上 writable container
每一层镜像的下面一层称为其父镜像(父子关系) add apache image references parent
第一层镜像为Base Image add emacs image
容器在最顶层 debian base image
其下的所有层都为readonly lxc,aufs/btrfs kernel
docker将readonly的fs层称作"image"
----------
列出本地的容器进程
docker ps -a
启动容器(运行镜像)
docker run是日常用的最频繁用的命令之一,同样也是较为复杂的命令之一
命令格式: docker run [OPTION] IMAGE [COMMAND] [ARG...]
OPTIONS:选项
-i: 表示启动一个可交互的容器,并持续打开标准输入
-t: 表示使用终端关联到容器的标准输入输出上
-d: 表示将容器放置后台运行
-rm: 退出后即删除容器
-name: 表示定义容器唯一名称
IMAGE: 表示要运行的镜像
COMMAND: 表示启动容器时要运行的命令*
交互式启动一个容器
docker run -ti stanleyws/alpine:v3.10.1 /bin/sh
ip a:分配了一个ip地址
cat /etc/issue:查看版本信息
非交互式启动一个容器:运行完命令后退出
docker run --rm stanleyws/alpine:v3.10.1 /bin/echo hello :一次性运行容易,退出时自动删除容器 -rm
hello
非交互式启动一个后台容器
docker run -d --name myalpine stanleyws/alpine:v3.10.1 /bin/sleep 300
查看宿主机进程
ps aux|grep sleep|grep -v grep
交互式进入容器
docker exec -ti 69d328913f16 /bin/sh:运行中的容器id
交互式操作容器
docker start|stop|restart 69d328913f16
删除容器
docker rm 69d328913f16
过滤出已经退出的容器并删除
for i in `docker ps -a|grep -i exit|awk '{print $1}'`;do docker rm -f $i;done
锁表并保存镜像里面当前已操作的所有更新到一个新的镜像
docker commit -p 69d328913f16 xiaoyunhui/apache:v1.10
将镜像导出到本地
docker save 69d328913f16 > alpine:v3.10.3_with_1.txt.tar
将本地文件导入到镜像
docker load < alpine\:v3.10.3_with_1.txt.tar
查看容器日志
docker logs 69d328913f16
docker高级功能
映射端口
docker run -p 容器外端口:容器内端口
挂载数据卷
docker run -v 容器外目录:容器内目录
传递环境变量并打印
docker run --rm -e E_OPTS=adcdefg test/alpine:latest printenv
容器内安装软件(工具)
yum/agt-get/apt等
运行一个容器
docker run --rm -d test/nginx:v1.12.2.01
进入容器
docker exec test:nginx:v1.12.2.01 /bin/bash
编写apt源
#tee /etc/apt/sources.list << EOF
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
EOF
更新apt源并安装curl
#apt-get update && apt-get install curl -y
检查容器运行环境
docker inspect 57cd7c49344682f4e6afe2
容器的生命周期
检查本地是否存在镜像,如果不存在即从远端仓库检索
利用镜像启动容器
分配一个文件系统,并在只读的镜像层外挂载一层可读写层
从宿主机配置的网桥接口中桥接一个虚拟接口到容器
从地址池配置一个ip地址给容器
执行用户指定的指令
执行完毕后容器终止
----------
dockerfile 用来创建镜像的txt命令集合文件
4组核心的dockerfile指令
user/workdir指令
vi /data/dockerfile/Dockerfile
FROM docker.io/oldboy1103/nginx:v1.12.2
USER nginx
WORKDIR /usr/share/nginx/html
构建镜像
docker build . -t docker.io/oldboy1103/nginx:v1.12.2
add/expose指令
将本地文件推到容器中;开启指定端口
FROM docker.io/oldboy1103/nginx:v1.12.2
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80
构建镜像
docker build . -t stanleyws/nginx:v1.12.2
run/env指令
设置变量;执行动作
FROM centos:7
ENV VER 9.11.4-74.el7_6.1
RUN yum install bind-$VER -y
构建镜像
docker build . -t oldboy1103/bind:v9.11.4
cmd/entrypoini指令
cmd: 运行命令
FROM centos:7
RUN yum install httpd -y
CMD ["httpd","-D","FOREGROUND"]
构建镜像
docker build . -t test/httpd:vts0.1
entrypoini: 将脚本引入容器执行
FROM centos
ADD entrypoint.sh /entrypoint.sh
RUN yum install epel-release -q -y && yum install nginx -y
ENTRYPOINT /entrypoint.sh
chmod 775 entrypoint.sh
cat entrypoint.sh
#!/bin/bash
/sbin/nginx -g "daemon off;"
构建镜像
docker build . -t test/httpd:vts0.1
docker的网络模型
NAT(默认)
路由模式
None
内网模式
Host
主机模式
联合网络
多个容器共享一个网络名称空间
docker run -it --rm --name lhwl2 --net=container:d62807b4af37 oldboy/nginx:test /bin/bash