镜像命令
查看镜像
docker images
-a #列出所有镜像
-q #只显示镜像id
搜索镜像
docker search 镜像名
--filter #过滤
#例子
docker search mysql --filter=STARS=3000
下载镜像
docker pull 镜像名[:tag]
# 如果不写tag,默认就是latest
# 以下命令等价
docker pull mysql
docker pull docker.io/library/mysql:latest
#指定版本下载
docker pull mysql:5.7
删除镜像
docker rmi 镜像id
-f #强制删除
#删除多个镜像
docker rmi 镜像id 镜像id 镜像id
#删除全部镜像
docker rmi $(docker images -aq)
查看镜像历史
docker history 镜像id
容器命令
有镜像才可以创建容器
新建容器并启动
docker run [可选参数] image
--name=容器名字 #命名容器
-d #后台方式运行
-it #使用交互方式运行,进入容器查看内容
-p 主机端口:容器端口 #指定容器的端口
-P #大写P,随机指定端口
-v #挂载数据卷
--add-host 主机名:ip地址 #写入容器hosts
#进入容器/bin/bash目录交互
docker run -it centos /bin/bash
#后台运行shell脚本
docker run -d centos /bin/bash -c "while true;do echo kuangshen;sleep 1; done"
注意:
- 后台运行时,必须有前台进程
- 否则会自动停止
- 例如:CentOS、Nginx
- 是否需要在容器里添加主机映射
- 是否需要挂载来传入本地文件
查看容器
docker ps #列出正在运行的容器
-a #列出所有容器
-q #只显示容器的编号
退出容器
exit #容器停止并退出
Ctrl+P+Q #容器不停止退出
删除容器
docker rm 容器id
-f #强制删除
#删除所有容器
docker rm -f $(docker ps -aq)
docker ps -a -q|xargs docker rm
启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止容器
docker kill 容器id # 强制停止当前容器
#进入后台运行的容器
docker exec -it 容器id /bin/bash
docker attach 容器id
# docker exec # 进入容器后开启一个新的终端
# docker attach # 进入容器正在执行的终端,不会启动新的进程
其他命令
查看日志
docker logs 容器id
-t #显示时间戳
-f #跟踪日志输出
--tail number #仅列出最新的n条
查看容器中进程信息
docker top 容器id
#PID:当前进程id
#PPID:父进程id
查看镜像的元数据
docker inspect 容器名称|id
拷贝容器文件到主机
docker cp 容器id:容器内路径 目的主机路径
DockerFile
DockerFile语法
FROM #基础镜像
MAINTAINER #作者,姓名<邮箱>
RUN #镜像构建时执行命令
COPY #类似ADD,但不会解压
ADD #添加内容到镜像,会自动解压
ENV #构建的时候设置环境变量
WORKDIR #镜像的工作目录
CMD #容器启动时运行的命令,只有最后一个生效,可被替代
ENTRYPOINT #类似CMD,但命令不会被替代而是追加
VOLUME #需要挂载的目录
EXPOSE #暴露端口配置
ONBUILD #继承该镜像就会运行的指令
构建镜像:docker build -f dockerfile文件路径 -t 镜像名:[tag] .
注意:
- 不要忘记最后加 "."
- Dockefile在当前路径下 就不用加-f
- 镜像构建时会把目录下的东西都放进去
- 所以最好单独建一个目录
实战测试
#编写Dockerfile文件
FROM centos
MAINTAINER author<xxxxxx@qq.com>
#相当于定义一个变量
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 添加vim 和 net-tools功能
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
#启动后进入哪个命令行
CMD /bin/bash
实战:Tomcat镜像
文件准备
- CentOS镜像文件
- tomcat压缩包
- jdk压缩包
编写dockerfile文件
FROM centos
MAINTAINER author<xxx@qq.com>
COPY readme.txt /usr/local/readme.txt
# ADD命令会自动解压
ADD jdk-8u261-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.37.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.37/bin/logs/catalina.o
ut
构建镜像
# 将文件命名为Dockerfile
docker build -t diytomcat .
启动镜像
docker run -d -p 9090:8080 --name tomcat01 -v /home/build/tomcat/test:/usr/local/apache-tomcat-9.0.37/webapps/test -v /home/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.37/logs diytomcat
Comments NOTHING