docker常用命令
1.1 基本命令
. 开启/停止/重启container(start/stop/restart)
容器可以通过run新建一个来运行,也可以重新start已经停止的container,但start不能够再指定容器启动时运行的指令,因为docker只能有一个前台进程。 容器stop(或Ctrl+D)时,会在保存当前容器的状态之后退出,下次start时保有上次关闭时更改。而且每次进入attach进去的界面是一样的,与第一次run启动或commit提交的时刻相同。
类似:-p 本地端口:容器端口 将本地的端口映射到容器的端口当中
docker run -d --name="rabbitmq" -p 5672:5672 -p 15672:15672 rabbitmq:management
CONTAINER_ID=$(docker start <containner_id>)
docker stop $CONTAINER_ID
docker restart $CONTAINER_ID
#修改镜像名字,即复制一份镜像并且重命名。前面的是源镜像信息,后面是新的镜像信息
docker tag centos:7 mycentos:1.删除
docker rm [containerID] 删除容器
docker rmi [imageID] 删除镜像
.查看容器的信息container(ps)
docker ps:可以查看容器的CONTAINER ID、NAME、IMAGE NAME、端口开启及绑定、容器启动后执行的COMMNAD。最常用的功能是通过ps来找到CONTAINER_ID, 以便对特定容器进行操作。官方给我选项有(通过docker ps --help查看):
--all , -a Show all containers (default shows just running)
--filter , -f Filter output based on conditions provided
--format Pretty-print containers using a Go template
--last , -n -1 Show n last created containers (includes all states)
--latest , -l Show the latest created container (includes all states)
--no-trunc Don’t truncate output
--quiet , -q Only display numeric IDs
--size , -s Display total file sizesdocker ps 默认显示当前正在运行中的container
docker ps -a 查看包括已经停止的所有容器
docker ps -l 显示最新启动的一个容器(包括已停止的)
docker ps --filter id=8ebf38818f8c--filter name=test 过滤容器id为8ebf38818f8c并且名称为test的关系。相同条件之间的关系是或,不同条件之间的关系是与
docker ps --filter name=^/test$ 通过正则表达式查找容器名称
docker stop $(docker ps --filter name=^/r-.+$ -aq) && docker rm $(docker ps --filter name=^/r-.+$ -aq) 停止并且删除r-开头的容器
.列出机器上的镜像(images)
其中我们可以根据REPOSITORY来判断这个镜像是来自哪个服务器,如果没有 / 则表示官方镜像,类似于username/repos_name表示Github的个人公共库,类似于regsistory.example.com:5000/repos_name则表示的是私服。 IMAGE ID列其实是缩写,要显示完整则带上--no-trunc选项
查看启动日志
查看运行的日志
docker logs -f containerid
#筛选docker日志
docker logs containerid 2>&1|grep 筛选的内容有的时候运行失败了,通过上面的方法查看不到日志,通过一下方法查看日志路径,然后显示
docker inspect --format '{{.LogPath}}' containerid
#path为上面命令显示的路径
cat path容器网络
#创建容器内部通信网络
docker network create redis-net
#查看当前存在的容器网络
docker network ls
#删除容器网络
docker network rm redis-net文件复制与挂载
从宿主机复制到容器:docker cp 宿主机本地路径 容器名字/ID:容器路径
docker cp /root/123.txt mycentos:/home/从容器复制到宿主机:docker cp 容器名字/ID:容器路径 宿主机本地路径
docker cp mycentos:/home/456.txt /root宿主机文件夹挂载到容器里:docker run -itd -v 宿主机路径:容器路径 镜像ID
docker run -itd -v /root/lcy/:/home centos:7
查看容器信息
docker inspect 容器id/容器名称1.2 Docker环境信息
--info命令
用于检测Docker是否正确安装,一般结合docker version命令使用。
--version命令
1.3 容器运维操作
--attach命令
docker attach命令对应开发者很有用,可以连接到正在运行的容器,观察容器的运行状况,或与容器的主进程进行交互。
--inspect命令
用于查看镜像和容器的详细信息,默认会列出全部信息,可以通过--format参数来指定输出的模板格式,以便输出特定信息。
1.4 在docker index中搜索image(search)
docker search TERM
# docker search seanlo
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
seanloook/centos6 sean's docker repos 0搜索的范围是官方镜像和所有个人公共镜像。NAME列的 / 后面是仓库的名字。
2.1 从docker registry server 中下拉image或repository(pull)
Usage: docker pull [OPTIONS] NAME[:TAG]
# docker pull centos上面的命令需要注意,在docker v1.2版本以前,会下载官方镜像的centos仓库里的所有镜像,而从v.13开始官方文档里的说明变了:will pull the centos:latest image, its intermediate layers and any aliases of the same id, 也就是只会下载tag为latest的镜像(以及同一images id的其他tag)。 也可以明确指定具体的镜像:
# docker pull centos:centos6当然也可以从某个人的公共仓库(包括自己是私人仓库)拉取,形如docker pull username/repository<:tag_name> :
# docker pull seanlook/centos:centos6如果你没有网络,或者从其他私服获取镜像,形如docker pull registry.domain.com:5000/repos:<tag_name>
# docker pull dl.dockerpool.com:5000/mongo:latest6.1 推送一个image或repository到registry(push)
与上面的pull对应,可以推送到Docker Hub的Public、Private以及私服,但不能推送到Top Level Repository。
# docker push seanlook/mongo
# docker push registry.tp-link.net:5000/mongo:2014-10-27registry.tp-link.net也可以写成IP,172.29.88.222。 在repository不存在的情况下,命令行下push上去的会为我们创建为私有库,然而通过浏览器创建的默认为公共库。
8.1 修改容器内的配置文件
因为docker容器里面是比较纯净的环境,里面可能没有vi等命令,需要自习安装
进入docker容器内部:
docker exec -it 容器名称 base更新命令
apt-get update下载vi命令
apt-get install vim修改指定的映射文件,如mysql的文件
vi /etc/mysql/my.cnf
8.2 自定义镜像
自定义容器的镜像有两种方式,一种是复制现有镜像,一种是手写dockerfile生成镜像
、commit
生成镜像:
#-a表示作者 -m表示描述 复制现有的容器id, 最后是生成的镜像名
docker commit -a "lcy" -m "自定义镜像" 容器id mydocker、dockerfile
dockerfile基础指令:
FROM:基于哪个镜像
MAINTAINER:作者和邮箱信息
COPY:复制命令,将文件复制到容器当中,如果是需要复制的文件与dockerfile在同一路径,要使用相对路径
ADD:也是复制文件,但是如果是.tar或者.zip文件,放入容器里会自动解压
WORKDIR:默认工作目录,进入容器的默认路径。如果不存在会自动创建
ENV:配置环境变量的命令
EXPOSE:暴露容器的端口
RUN:执行后边的命令,在构建镜像的时候执行,作用于镜像层面
ENTRYPOINT:执行后边的命令,在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条
CMD:执行后边的命令,在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条,容器启动后执行默认的命令或者参数,允许被修改
命令格式:
shell命令格式:RUN yum install -y net-tools
exec命令格式:RUN [ "yum","install" ,"-y" ,"net-tools"]
将dockerfile与123.txt放到相同路径下,执行一下命令构建镜像,先vi dockerfile将文件复制进去
#.表示当前路径,会自动找出dockerfile文件。也可以自己指定文件
docker build -t mycentos:v2 .# this is a dockerfile
#获取基础镜像centOS7
FROM centos:7
#记录作者和邮箱
MAINTAINER lcy 123456@qq.com
#打印记录
RUN echo "正在构建镜像!!!"
#选择工作目录,即进入镜像的默认路径
WORKDIR /home/user
#复制当前文件夹下的123.txt到容器的/home/user下
COPY 123.txt /home/user
#安装网络工具
RUN yum install -y net-tools通过下面命令可以看到镜像的分层结构,后面的是镜像名称/镜像id
docker history -t centos:v29.1 清理容器
# 查看docker各类型文件占用情况
docker system df
#删除所有关闭的容器:
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
#删除所有dangling镜像(即无tag的镜像):
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
#删除所有dangling数据卷(即无用的Volume):
docker volume rm $(docker volume ls -qf dangling=true)
#清理none镜像
docker rmi -f $(docker images | grep "<none>" | awk "{print $3}")
#清理
docker image prune -a -f