Docker
1.三要素
- 容器
- 镜像
- 仓库
2.安装
yum update
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce-18.03.1.ce
systemctl start docker 启动
systemctl enable docker 开机启动 —很重要
docker version
[root@docker01 ~]# docker version
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:20:16 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:23:58 2018
OS/Arch: linux/amd64
Experimental: false
修改为阿里云镜像
mkdir -p /etc/docker
touch daemon.json
vi daemon.json
加入内容:{ “registry-mirrors”: [“专属加速地址”] }
systemctl daemon-reload
systemctl restart docker
3.docker常见的基础命令
-
非交互式
docker run ubuntu:18.04 /bin/echo “HelloWorld”
-
交互式
docker -i -t -d ununtu:18.04 /bin/bash
docker --help 帮助命令
docker pull ubuntu 默认下载最新版本
docker pull ubuntu:18.06
docker ps -a 查看启动的容器的状态
docker ps -aq 查看容器的ID
docker run -i -t -d ubuntu 后台运行
docker run -p 8888:8080 tomcat 指定容器端口运行tomcat
docker run -P tomcat 随机端口运行
docker restart 容器ID 重启
docker stop 容器ID 停止
docker start 容器ID 启动
docker rm 容器ID 删除
docker log 容器名称/容器ID 查看日志
docker attach 容器ID 进入容器
docker exec -it /bin/bash 容器ID 进入容器
docker exec -it 容器ID ls -l 不用进入容器
4.镜像操作
docker search httpd 搜索镜像
docker images 显示所有镜像
docker rmi ubuntu 删除镜像
docker rmi -f ubuntu 强制删除镜像
docker export 容器ID>ubuntu.tar.gz 导出到文件
docker import ./ubuntu.tar 导入镜像
docker commit -m=“comment” -a=“author” 容器ID name:tag 创建镜像并提交到本机
5.容器数据卷
docker run -it -v /usr/dataCentosVolume:/usr/dataCentosVolume centos 容器和宿主机共享文件系统
docker run -it -v /usr/dataCentosVolume:/usr/dataCentosVloume:ro centos 容器和宿主机共享文件系统,容器只能读取文件不能修改和添加
6.DockerFile
docker inspect 容器ID 查看容器的信息
准备文件
mkdir /mydocker
vi DockerFile
填入内容:简易版
FROM centos
VOLUME ["/dataCentosVolume01",“dataCentosVolume02”]
CMD echo “finished … success”
CMD /bin/bash
docker build -f /mydocker/DockerFile -t my_centos . 用dockerfile构建新的centos镜像
启动:docker run -it my_centos
7.用DockerFile创建容器数据卷
docker run -it --name dc01 my_centos
docker run -it --name dc02 --volumes-from dc01 my_centos
docker run -it --name dc03 --volumes-from dc01 my_centos
dc02和dc03共享dc01的数据卷,容器的关闭不会影响其他容器对数据卷的读写操作
8.DockeFile解析
FROM 基础镜像,当前镜像基于哪个镜像
MAINTAINER 镜像维护者的姓名和邮箱
RUN 容器构建时需要运行的命令
EXPOSE 容器对外暴露的端口
WORKDIR 指定在创建容器后,终端登录进来的默认工作目录
ENV 用来在构建镜像过程中设置的环境变量
ADD 将宿主机目录下的文件拷贝到镜像并且ADD命令会自动处理URL和解压tar压缩包
COPY 类似ADD,但是不会自动处理URL和解压
VOLUME 容器数据卷
CMD 指定一个容器启动时运行的命令,有多个CMD只会生效最后一个,CMD会被dockers run之后的参数替换
ENTRYPOINT 和CMD一样,指定容器启动程序和参数
ONBUILD 当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild出发
1.案例一
FROM centos
MAINTAINER waj123@qq.com>
ENV mypath /mywork
RUN mkdir $mypath
RUN yum -y install vim
RUN yum -y install net-tools
WORKDIR $mypath
VOLUME $mypath
EXPOSE 80
CMD echo “==========================================”
CMD /bin/bash
2.案例二
FROM centos
RUN yum -y install curl
CMD [“curl”,"-s",“http://www.baidu.com”]启动容器run后面的命令会替换CMD后面的命令
FROM centos
RUN yum -y install curl
ENTRYPOINT [“curl”,"-s",“http://www.baidu.com”]启动容器run后面的命令会追加到CMD命令
3.案例三
FROM centos
RUN yum -y install curl
ENTRYPOINT [“curl”,"-s",“http://www.baidu.com”]
ONBUILD RUN echo “^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^”docker build -f /mydocker/myip02 -t myip02:2.0 .
FROM myip02:2.0
RUN yum -y install curl
CMD [“curl”,"-s",“http://www.baidu.com”]docker build -f /mydocker/myip03 -t myip03:1.0
在构建myip03:1.0的时候会触发myip02:2.0镜像的onbuild
mysql
docker run -d -p 3306:3306 --name mysql -v /mydocker/mysql/conf:/etc/mysql/conf.d -v /mydocker/mysql/logs:/logs -v /mydocker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
redis
docker run -d -p 6379:6379 --name redis -v /mydocker/redis/data:/data -v /mydocker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
docker exec -it 容器ID redis-cli 打开redis客户端