docker安装及相关学习
centos6安装docker
yum install -y epel-release
yum install -y docker-io
centos7安装docker
1、安装依赖docker依赖于系统的一些必要的工具,可以提前安装。
yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加软件源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装docker-ce
yum clean all
yum makecache fast
yum -y install docker-ce
4、启动服务通过systemctl启动服务
systemctl start docker
参考官网 https://docs.docker.com/install/linux/docker-ce/centos/
配置镜像加速(centos7)
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://nmbhaxl0.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
docker相关命令
--docker镜像命令 docker search xxx镜像(tomcat) docker search -s 30 xxx 点赞数超过30的罗列 docker pull xxx 拉取镜像 docker pull tomcat等价于docker pull tomcat:latest docker rmi xxx 删除镜像 docker rmi -f hello-world 强制删除镜像 docker rmi -f A B 强制删除A和B镜像 docker rmi -f $(docker images -qa) 强制删除所有镜像 --docker容器命令 docker ps -l 上一次运行的容器 docker run -it centos 打开并启动centos -i交互 -t 伪终端 docker run -it --name mycentos01 centos 命名别名 退出容器 exit 或者 ctrl+P+Q(容器不停止退出) docker attach 容器id 针对ctrl+P+Q(容器不停止退出) ,重新进入容器容器 docker exec -it 容器id ls -la /tmp 可以之前在容器外执行 docker exec -t 容器id /bin/bash docker run -d centos 以守护方式启动 docker commit 提交容器副本使之成为新的镜像 docker commit -a(作者) -m(提交的描述信息) 容器ID docker commit -a="doutery" -m="tomcat owner" 717bab976927 doutery/mytomcat:1.1 docker run -p 8081:8080 tomcat 端口映射8081
.容器转为镜像**
docker commit 容器id mytomcat:1.0
打包成压缩文件
docker save -o mytomcat.tar mytomcat:1.0
加载镜像
docker load -i mytomcat.tar
数据卷
直接命令添加
docker run -it -v /myDataVolume:/dataVolumeContainer centos 宿主的目录下和容器内的目录下文件是共享的,同步的
docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos 容器内的dataVolumeContainer只读 DockerFile添加
数据卷容器
docker run -it --name doc1 doutery/centos
docker run -it --name doc2 --volumes-from doc1 doutery/centos 继承一个doc1
DockerFile
-
手动编写一个dockerfile文件,当然必须符合file的规范
-
有这个文件,直接docker build命令执行,获得一个自定义镜像
-
run
DockerFile体系结构(保留字指令)
-
FROM 基础镜像,当前的新镜像是基于哪个镜像的
-
MAINTAINER 镜像维护者的姓名和邮箱地址
-
RUN 容器构建时需要运行的额外的命令
-
EXPOSE 当前容器对我暴露出的端口
-
WORKDIR 指定在创建容器后,终端默认登录的进来的工作目录,一个落脚点,如果不配置默认为根目录 进入之后目录为/
-
ENV 用来在构建镜像过程中设置环境变量
-
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
-
COPY 类似ADD,拷贝文件和目录到镜像中
-
VOLUME 容器数据卷,用于数据保存和持久化工作
-
CMD 指定一个容器启动时要运行的命令
-
ENTRYPOINT 指定一个容器启动时要运行的命令
-
ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
docker build -f /mydocker/DockerFile1 -t mycentos:1.1 . docker run -it mycentos:1.1
DockerFile1
FROM centos MAINTAINER doutery<doutery@163.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 "SUCCESS------------------------OK" CMD /bin/bash
ADD COPY
docker-compose 容器编排
事例:用nginx反向代理app 8080端口
mkdir docker-compose
vim docker-compose.yml
version: '3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
mkdir -p ./nginx/conf.d
docker-compse up
docker私有仓库搭建
# 拉取私有仓库镜像
docker pull registry
# 启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 打开浏览器 http://ip:5000/v2/_catalog 看到{"repositories":[]}表示成功
# 修改daemon.json
vim /etc/docker/daemon.json 信任私有仓库地址,添加
{"insecure-registries":["ip:5000"]}
systemctl daemon-reload && systemctl restart docker
docker start registry
harbor私有仓库安装可以参考https://blog.doutery.club/?p=191
镜像上传到私有仓库
1 打标签
docker tag registry ip:5000/myregistry:1.1
2 上传标记的镜像
docker push ip:5000/myregistry:1.1
docker指令
杀死所有正在运行的容器
docker kill $(docker ps -a -q)
删除所有已经停止的容器
docker rm $(docker ps -a -q)
删除所有未打 dangling 标签的镜像
docker rmi $(docker images -q -f dangling=true)
删除所有镜像
docker rmi $(docker images -q)
强制删除镜像名称中包含“doss-api”的镜像
docker rmi --force $(docker images | grep doss-api | awk '{print $3}')
删除所有悬空映像。如果-a指定,还将删除任何容器未引用的所有映像
docker image prune