常用命令
查询镜像
docker search xxx
拉去镜像
docker pull xxx
查询镜像
docker image ls
删除镜像
docker rmi **IMAGE ID 镜像id**
查询所有的docker进程
ps -ef|grep docker
运行镜像生成容器
参数解释:参数命令详解
-d 后台运行容器
-p 端口映射,宿主机端口:容器内端口 你访问宿主机也访问到了容器内端口
docker run (参数) 镜像id bash
该命令会返回一个容器的id
查看机器打开了哪些端口
netstat -tunlp
查看容器是否在运行
docker ps
停止容器
docker stop 容器id
启动容器
docker start 容器id
重启容器
docker restart 容器id
运行容器且进入容器内,交互式操作
bash 进入容器后 执行的命令
docker run -it 镜像id bash
进入正在运行的容器内
docker exec -it 容器id bash
改名
docker tag 镜像id 新名字
查看容器内信息
docker top 容器id
docker 生命周期
平时的虚拟机原理
docker 镜像的原理
docker解决的问题
- 解决了环境的兼容问题,在容器中运行linux发行版,以及各种软件,[windows+docker+容器1 (cents)+容器2(ubuntu)]
- 环境很干净,你安装的所有内容,都在容器里,不想要了,就直接制除容器,不影响你宿主机
- 比如你想把mysa容器内的数据,配置,全部迁移到服务器上,只需要提交该容器,生成镜像,镜像放到服务器上,docker run,咔咔就运行了
docker 应用
docker search 镜像名:tag 版本
# 查看本地镜像
docker images
docker image ls
# 下载
docker pull 名字:版本
ls /var/lib/docker
# 查看镜像的方法
docker images 具体镜像名
docker images -q (只列出id)
docker images --format "{{.ID}--{.}}" (格式化显示)
# 删除镜像 根据id 名字 摘要删除
docker rmi ()
# 查看执行的容器
docker ps -a
# 删除容器
docker rm
# 批量删除
docker rmi 'docker images -aq'
#保存镜像
docker image save (镜像名) > (地址)
docker容器管理
容器内的进程必须处于前台运行状态,否则容器就会直接退出,自己部署一个容器运行,命令不得后台运行,前台运行即可
如果容器内,什么事情也没做,容器也会挂掉,容器内,必须有一个进程在前台运行
docker run ()等于创建加启动,镜像不存在就会去下载
#执行容器,且执行命令
docker run centos ping baidu.com
# 让容器在后台跑
docker run -d centos
docker run -it -rm centos (运行后自动删除)
docker run -it -rm --name av centos (运行后自动删除,起个名字)
#查看日志
docker logs () | tail -5 (最新的五条日志)
# 进入运行的容器内
docker exec -it (容器id) bash
ps -ef (看有哪些进程在跑)
# 详细展示容器信息
docker container inspect 容器id
# 查看宿主机某个端口是否打开
netstat -tunlp|grep 80
# 端口映射
docker run -it -rm --name av centos -p 80:80(运行后自动删除,起个名字)
# 提交容器,黑盒,没人知道是怎么构造的
docker commit 容器id 新的镜像名
# 查询时筛选
docker ps -a | head -2
dockerfill
镜像是分层存储的,每层都是基于下层的修改
#基础镜像信息
FROM (基础镜像,名称)
# 制作镜像操作指令
RUN yum install openssh-server -y
# 容器启动时执行指令
CMD ["/bin/bash"]
dockerfill 指令
FROM 这个镜像的妈妈是谁(指定基础镜像)
MANTAINER 告诉别人,谁负责养他(指定维护者信息,可以没有)
RUN 你想让他干啥(在命令前加上RUN即可)
ADD 添加宿主机文件到容器内 (,会自动解压)
COPY 文件 可以保存宿主文件的元数据,包括权限等等
WORKDIR 设置当前工作目录 和cd一样
VOLUME 设置券,挂载主机目录
EXPOSE 指定对外的端口
CMD 指定容器启动后要干的事情
USER 改变环境,指定用户
ENTRYPOINT
ENTRYPOINT 和CMD一样,都是在指定容器启动程序以及参数
当指定ENTRYPOINT 后,cmd指令语义就有变化,会把cmd的内容当作参数传递给ENTRYPOINT 。
如果使用ENTRYPOINT后,里面的命令是可修改的,CMD是不可修改的,再添加新的参数智能覆盖
ARG ENV指令
#设置环境变量
ENV NAME =""
# 后续所有操作可以根据$NAME调用,更有利于维护
# ARG和ENV一样,也是设置环境变量
# 区别在于ARG只在镜像构建时用,ENV在容器中也可以用
VOLUME
将容器内的数据和宿主机关联
VOLUME /data #将容器内的/data文件夹,在容器内运行时,该目录自动挂载为匿名卷,任何向该目录中写入数据的操作,都不会被容器记录,保证容器存储层的无状态理念