安装相关:
#列出版本信息
yum list docker-ce --showduplicates | sort -r
#安装指定版本
yum install docker-ce-17.03.0.ce-1.el7.centos
#安装
yum install -y docker
#启动
systemctl start docker
#验证环境就绪
docker run hello-world
yum remove docker docker-common docker-selinux
yum install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
#安装Docker-Compose
#进入指定目录(自由指定)
cd /usr/server
#下载
curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#可执行赋权
chmod +x /usr/local/bin/docker-compose
#查看版本验证安装
docker-compose --version
#卸载
1.查询安装过的包
yum list installed | grep docker
2.删除安装的软件包
yum -y remove docker-engine.x86_64
3.删除镜像/容器等
rm -rf /var/lib/docker
1.基础命令
选项 | 说明 | 其他 |
---|---|---|
--config [string] | 客户端本地配置文件路径 | 默认为 ~/.docker |
-D, --debug | 启用调试模式 | |
--help | 打印用法 | |
-H, --host list | 通过socket访问指定的docker守护进程(服务端) | unix:// , fd:// , tcp:// |
-l, --log-level [string] | 设置日志级别 (debug 、info 、warn 、error 、fatal ) | 默认为 info |
-v, --version | 打印docker客户端版本信息 |
1.1 镜像相关
#查看本地镜像
docker images
# 查询三颗星及以上名字包含alpine的镜像
docker search -f=stars=3 alpine
#搜索镜像库 docker search nginx
docker search
#获取alpine Linux 的镜像
docker pull alpine
#推送镜像到仓库
docker push [镜像名]:[tag]
#登录/退出第三方仓库
docker login harbor
docker logout daocloud.io
#查看本地镜像
docker images
#删除本地镜像
#如果用镜像id作为参数, 可以只输入前几位, 能唯一确定即可(可以同时删除多个镜像, 空格隔开)。此外, 如果该镜像启动了容器需要先删除容器
docker rmi [镜像名 or 镜像id]
#查看镜像详情
docker inspect [镜像名 or 镜像id]
#打包本地镜像, 使用压缩包来完成迁移
# 默认为文件流输出
docker save alpine > /usr/anyesu/docker/alpine.img
# 或者使用 '-o' 选项指定输出文件路径
docker save -o /usr/anyesu/docker/alpine.img alpine
#导入镜像压缩包
docker load < [文件路径]
docker load < /usr/anyesu/docker/alpine.img
docker load -i /usr/anyesu/docker/alpine.img
#修改镜像tag
docker tag [镜像名 or 镜像id] [新镜像名]:[新tag]
docker tag a41 anyesu/alpine:1.0
1.2 容器相关操作
#创建、启动容器并执行相应的命令
docker run [参数] [镜像名 or 镜像id] [命令]
#如果没有指定命令是执行镜像默认的命令, 创建镜像的时候可设置。另外要注意的一点, 启动容器后要执行一个前台进程(就是能在控制台不断输出的, 如tomcat的catalina.sh)才能使容器保持运行状态, 否则, 命令执行完容器就关闭了。 例如:hello-world
docker run hello-world
docker run -d -it -v /home/proxy:/home/proxy -p 8088:8088 docker.io/oddrationale/docker-shadowsocks -c /home/proxy/shadowsocks.json
docker run -d --name anyesu-container -h docker-anyesu --dns 8.8.8.8 -e docker_host=172.18.0.1 -e docker_host2=172.18.0.2 --net anyesu_net --ip 172.18.0.13 --expose 8081 --expose 8082 -P -p 8000:8000 -p 8001:8001 -v /usr/anyesu:/usr/anyesu --add-host anyesu_host:172.18.0.1 tomcat:7
912e6632161de0783a057aa02380e676753f66cfb367ef1686d4d09cdc931659
#-d 后台运行容器, 并返回容器ID;不指定时, 启动后开始打印日志, Ctrl + C 退出命令同时会关闭容器
#-i 以交互模式运行容器, 通常与 -t 同时使用
#-t 为容器重新分配一个伪输入终端, 通常与 -i 同时使用
#--name "anyesu-container" 为容器指定一个别名, 不指定时随机生成
#-h docker-anyesu 设置容器的主机名, 默认随机生成
#--dns 8.8.8.8 指定容器使用的DNS服务器, 默认和宿主一致
#-e docker_host=172.17.0.1 设置环境变量
#--cpuset="0-2" or --cpuset="0,1,2" 绑定容器到指定CPU运行
#-m 100M 设置容器使用内存最大值
#--net bridge 指定容器的网络连接类型, 支持 bridge / host / none / container 四种类型
#--ip 172.18.0.13 为容器分配固定ip(需要使用自定义网络)
#--expose 8081 --expose 8082 开放一个端口或一组端口, 会覆盖镜像设置中开放的端口
#-p [宿主机端口]:[容器内端口] 宿主机到容器的端口映射, 可指定宿主机的要监听的ip, 默认为 0.0.0.0
#-P 注意是大写的, 宿主机随机指定一组可用的端口映射容器 expose 的所有端口
#-v [宿主机目录路径]:[容器内目录路径] 挂载宿主机的指定目录(或文件)到容器内的指定目录(或文件)
#--add-host [主机名]:[ip] 为容器hosts文件追加host, 默认会在hosts文件最后追加 [主机名]:[容器ip]
#--volumes-from [其他容器名] 将其他容器的数据卷添加到此容器
#--link [其他容器名]:[在该容器中的别名] 添加链接到另一个容器, 在本容器hosts文件中加入关联容器的记录, 效果类似于 --add-host
#单字符选项可以合并, 如 -i -t 可以合并为 -it
#查看运行中的容器
#加 -a 选项可查看所有的容器
docker ps
#开启/停止/重启容器
# 关闭容器(发送SIGTERM信号,做一些'退出前工作',再发送SIGKILL信号)
docker stop anyesu-container
# 强制关闭容器(默认发送SIGKILL信号, 加-s参数可以发送其他信号)
docker kill anyesu-container
# 启动容器
docker start anyesu-container
# 重启容器
docker restart anyesu-container
#删除容器
#可以指定多个容器一起删除, 加 -f 选项可强制删除正在运行的容器
docker rm [容器名 or 容器id]
#查看容器详情
docker inspect [容器名 or 容器id]
#查看容器中正在运行的进程
docker top [容器名 or 容器id]
#将容器保存为镜像
docker commit [容器名 or 容器id] [镜像名]:[tag]
#使用Dockerfile构建镜像
docker build -t [镜像名]:[tag] -f [DockerFile名] [DockerFile所在目录]
#先创建并进入一个新的被命名为newos的新容器
docker run -it --name newos docker.io/centos
#持久保存的环境变量
vim ~/.bashrc
docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
beeaecb7fbe0
1、删除所有容器
docker rm `docker ps -a -q`
2、删除所有镜像
docker rmi `docker images -q`
3、按条件删除镜像 没有打标签
docker rmi `docker images -q | awk '/^<none>/ { print $3 }'`
镜像名包含关键字
docker rmi --force `docker images | grep doss-api | awk '{print $3}'`
//其中doss-api为关键字
1.3 硬件资源
#显示容器硬件资源使用情况
#不指定容器时显示所有正在运行的容器
docker stats [选项] [0个或多个正在运行容器]
#更新容器的硬件资源限制
docker update [选项]
2. 创建docker镜像详解
2.1 用save和export的方式将镜像保存为tar包,然后在需要的时候导入tar镜像包
2.2 将已经配置好的镜像push到我们的私有仓库或者已注册过的共有仓库中,需要的时候直接pull下来使用
这两种方式都可以,但是自动化程度低、自由度不够、定制起来比较麻烦。既然如此,那就来说一下更加自动化的创建方式。
2.3 如何用Dockerfile创建镜像
先看一份简单的Dockerfile文件
# this is a centos nginx base image dockerfile
# Author: peizhouyu
FROM centos
MAINTAINER MrPri
RUN mkdir /usr/server
RUN mkdir /usr/server/nginx
ADD nginx-1.15.7.tar.gz /usr/server/
#COPY nginx-1.15.7.tar.gz /usr/server/
RUN yum -y install tar
#RUN tar -zxf /usr/server/nginx-1.15.7.tar.gz
RUN yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel \
# && mv /usr/server/nginx-1.15.7 /usr/server/nginx \
&& cd /usr/server/nginx-1.15.7 && ./configure && make && make install
CMD /usr/sbin/nginx