基础命令:
# docker 基础命令记录
查询镜像: docker search 镜像名
运行容器: docker start "容器id"
运行容器交互模式: docker run -it "容器id/容器名"
退出不停止容器: ctrl+p+q
退出并停止容器: exit/ctrl+d
停止正在运行的容器: docker kill 容器ID
停止正在运行的容器: docker stop 容器ID
删除已经停止的容器: docker rm "容器ID"
删除未停止的容器: docker rm -f "容器ID"
一次性删除多个容器: docker rm -f $(docker ps -a -q)
一次性删除多个容器: docker ps -a -q | xargs docker rm
后台守护进程启动: docker run -d 容器名
后台守护进程启动并添加日志在docker ps 可以查看进程状态: docker run -d centos /bin/sh -c "while true; do echo hello suny;sleep 2;done"
查看docker进程运行日志: docker logs -t -f --tail 3 容器ID
查看容器内运行的进程: docker top 容器ID
查看容器内部细节: docker inspect 容器ID
进入未停止的容器: docker attach 容器ID
进入未停止的容器: docker exec -it 容器ID /bin/bash
不进入未停止的容器进行操作: docker exec -it 容器ID ls -l /tmp
从容器内拷文件到主机: docker cp 容器ID:/tmp/yum.log ./
Docker运行tomcat镜像并带端口映射: docker run -it -p 8008:8080 tomcat
Docker随机分配端口映射运行镜像: docker run -it -P tomcat
提交容器副本做成新的镜像: docker commit -a="suny" -m="delete tomcat docs" 容器ID suny/tomcat:1.2
Docker容器数据卷:
主要功能:
1. Docker数据持久化
2. 容器间继承+共享数据
执行命令:
命令一: 无权限
docker run -it -v /宿主机的绝对路径目录:/容器内目录 --privileged=true 镜像名
命令二: 容器内增加只读权限
docker run -it -v /宿主机的绝对路径目录:/容器内目录:ro 镜像名
# 防止访问docker容器挂在的共享目录出现无权限进入问题: 增加 --privileged=true
DockerFile: 类似镜像文件的代码描述
一、DockerFile数据卷基础测试:
步骤一: 编写可执行的dockerfile脚本 /dockerfile/Dockerfile
# volume test
FROM centos
VOLUME ["/dataVolume1", /dataVolume2]
CMD echo "finished, ------ success1"
CMD /bin/bash
步骤二: 执行build
docker build -f ./Dockerfile -t suny/centos0425
注意: dockerfile文件不指定宿主机共享目录则访问宿主机的/var/lib/docker/volumes/*目录
DockerFile数据卷容器:
容器间传递共享数据: --volumes-from
docker run -it --name dc01 镜像名
docker run -it --name dc02 --volume-from dc01 镜像名
docker run -it --name dc03 --volume-from dc01 镜像名
注意: 容器之间配置信息的传递, 数据卷的生命周期一直持续到没有容器使用它为止
DockerFile解析过程:
- 每条保留指令必须大写,且后面必须跟随至少一个参数
- 指令按照从上到下,顺序执行
- "#"号表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker执行DockerFile的大致流程:
- docker从基础镜像运行一个容器
- 执行一条指令并对容器做出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新容器
- 执行dockerfile中的下一条指令直到所有指令都执行完成
DockerFile文件总结:
- Dockerfile是软件的原材料
- Docker镜像是软件的交付品
- Docker容器可以认为软件运行的状态
- Dockerfile面向开发
- Docker镜像成为交付标准
- Docker容器则涉及部署与运维、三者缺一不可,合力充当Docker体系的基石
DockerFile保留字指令:
FROM: 基础镜像,当前镜像基于那个镜像
MAINTAINER: 作者,作者邮箱
RUN: 容器构建时需要运行的命令
EXPOSE: 当前容器对外暴露的端口号
WORKDIR: 指定在创建容器后,终端默认登录进来的工作目录
ENV: 用来构建镜像过程中设置环境变量
ADD: 拷贝文件到镜像且自动解压
COPY: 拷贝文件到镜像, copy ["原路径", "镜像内目标路径"]
VOLUME: 容器数据卷, 用于数据保存和持久化工作
CMD: 指定一个容器启动时要运行的命令, DockerFile中可以运行多个CMD命令,但只有最后一个生效,CMD会被docker run 之后的参数替换
ENTRYPOINT: 指定一个容器启动时要运行的命令,多个entrypoint命令会变成追加而不是覆盖
ONBUILD: 当构建一个被继承的DockerFile是运行命令,父镜像在被子继承后父镜像的onbuild被触发
案例一: centos镜像安装vim及net-tools
注意: 前提本地已经拉取过centos镜像
- 第一步: 创建文件Dockerfile
FROM centos
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 8090
CMD /bin/bash
- 第二步: build出新镜像
docker build -f Dockerfile2 -t mycentos:1.3 .
- 第三步: 运行新镜像
docker run -it 镜像ID
- 第四步: 查看镜像变更历史
docker history 镜像ID
案例二: centos镜像安装tomcat,jdk1.8
- 第一步: 创建Dockerfile文件
FROM centos
MAINTAINER [email protected]
#把宿主机当前上下问的c.txt文件拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/copy_c.txt
#把tar包添加到容器中
ADD jdk-8u201-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.19.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.19
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.19
ENV PATH $PATH:%JAVA_HOME/bin:%CATALINA_HOME/lib:%CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh", "run"]
CMD /usr/local/apache-tomcat-9.0.19/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.19/bin/logs/catalina.out
- 第二步: build出新镜像
sudo docker build -f Dockerfile1 -t mycentos:new .
- 第三步: 运行新镜像
docker run -it -p 9080:8080 --name myt9 -v /home/suny/mydocker/tomcat9/test:/usr/local/apache-tomcat-9.0.19/webapps/test -v /home/suny/mydocker/tomcat9/logs:/usr/local/apache-tomcat-9.0.19/logs --privileged=true mycentos:new
案例三: docker安装mysql容器
- 第一步:
docker pull mysql:5.7
- 第二步:
docker run -d --name mysql -p 12345:3306 -v /home/suny/mydocker/mysql5.7/conf:/etc/mysql/conf.d -v /home/suny/mydocker/mysql5.7/logs:/logs -v /home/suny/mydocker/mysql5.7/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
- 第三步: 备份docker运行的mysql容器的数据
docker exec 容器ID sh -c "exec mysqldump --all-databases -uroot -p'root'" > /home/suny/mydocker/mysql5.7/all-databases.sql
案例四: docker安装redis容器
- 第一步:
docker pull redis:3.2
- 第二步:
docker run -d --name redis -p 9979:6379 -v /home/suny/mydocker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /home/suny/mydocker/redis/data:/data redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
- 第三步: 在宿主机redis.conf目录创建redis.conf文件,并复制相关配置文件
- 第四步: 连接docker redis运行容器的redis-cli
docker exec -it 容器ID redis-cli
本地镜像推送到阿里云镜像仓库
sudo docker login [email protected] registry.cn-hangzhou.aliyuncs.com
sudo docker tag 镜像ID registry.cn-hangzhou.aliyuncs.com /suny/上传到阿里云显示的(镜像名:版本号)
sudo docker push registry.cn-hangzhou.aliyuncs.com /suny/上传到阿里云显示的(镜像名:版本号)
注意:以上内容是个人使用的随手记录, 就是介绍了下简单的使用
欢迎大家来吐槽,准备好瓜子饮料矿泉水,开整!!!
---------------------------------------------------------------------------------------
搞笑一则:能动手尽量别吵吵