Docker基础篇

 

基础命令: 

# 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/上传到阿里云显示的(镜像名:版本号)

 

注意:以上内容是个人使用的随手记录, 就是介绍了下简单的使用

欢迎大家来吐槽,准备好瓜子饮料矿泉水,开整!!!

---------------------------------------------------------------------------------------

搞笑一则:能动手尽量别吵吵
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章