docker

docker常用命令大全

java-jar 运行jar

nohup /root/java/jdk1.8.0_111/bin/java -jar service-side.jar --Dspring.config.location=config/* >/dev/null 2>&1 &

有状态容器不适合docker部署

docker search nginx  -- 查看 可以下载
dockers images  --查看本地镜像 
docker ps   --查看运行中的容器
docker start name 运行容器
docker stop name 停止容器运行
docker pull ${CONTAINER NAME}                    #拉取镜像                                     
docker ps -a                  #查看所有正在运行的容器,加-q返回id
docker rmi ${IMAGE NAME/ID}                      #删除镜像
docker rm ${CONTAINER NAME/ID}                   #删除容器
docker exec -it nginx /bin/bash        #进入容器
docker inspect name                    #查看容器信息
docker restart naem                 #重启容器
docker cp name:path path本机       # name  容器在容器内拷贝文件到本地
docker logs name                  #查看日志
docker logs --tail 10 name     # 查看后10条日志
docker logs  name -f    # 一直
--restart=always           docker重启 该容器也重启
docker image inspect (docker image名称):latest|grep -i version  查看latest版本
docker search activemq   查看下载
--network host    网络模式,所有容器端口都对应属主机端口,不存在映射关系。

-t:为容器分配 一个伪终端;-i:进行交互式的标准输入

有的目录挂载不出来  比如mysql bin

镜像导出导入

保存到当前目录下

`docker save -o nginx.tar nginx:latest`
或
`docker save > nginx.tar nginx:latest`
其中-o和>表示输出到文件,`nginx.tar`为目标文件,`nginx:latest`是源镜像名(name:tag)


`docker load -i nginx.tar`
或
`docker load < nginx.tar`
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

启动

 docker run --name csXXX -d -p 8686:8686  cs1.0
                容器名字   后台运行     指定端口   镜像名字

打包

docker build -t name .

Dockerfile

dockerfile EXPOSE 端口 是项目使用的端口

-p 8687:8686 访问端口 映射 程序运行的端口

FROM java:8
MAINTAINER lgl
ADD service-side.jar demo.jar
EXPOSE 8686
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["java","-jar","demo.jar"]

python docker中下载包本地要安装py环境好像

#基于的基 础镜像
FROM python:3.7.4

#代码添加到code文件夹,后面可以通过进入容器中看的
ADD ./ /code

# 设置code文件夹是工作目录
WORKDIR /code

# 安装支持
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

#当容器启动时,使用python3执行指定路径的py脚本
CMD ["python3", "/code/main.py"]

mysql 运行命令

docker run -p 3306:3306 -d --name mymysql -v /docker/mysql/data:/usr/share/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.5

-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
-v /docker/mysql/data:/usr/share/mysql:将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码

redis 运行命令

docker run -p 6379:6379 -d --name myredis -v /docker/redis/data:/data redis redis-server --appendonly yes 

-p 6379:6379 将容器的6379端口映射到主机的6379端口
-v /docker/redis/data:/data: 将主机中当前目录下的data挂载到容器的/data
redis-server --appendonly yes: 在容器执行redis-server启动命令,并打开redis持久化配置

docker pull ${CONTAINER NAME}                    #拉取镜像
docker save ${IMAGE NAME} > ${FILE NAME}.tar     #将镜像保存成文件
docker load < ${FILE NAME}.tar                   #从文件加载镜像
docker run...                                    #运行一个容器
    --name ${container name}                          #设置容器名称
    -p ${host port}:${container port}                 #映射主机和容器内的端口
    -e ${env name}=${env value}                       #添加环境变量
    -d                                                #后台运行
    -v ${host folder path}:${container folder path}   #将主机目录挂在到容器内
# Advance use 
docker ps -f "status=exited"                                   #显示所有退出的容器
docker ps -a -q                                                #显示所有容器id
docker ps -f "status=exited" -q                                #显示所有退出容器的id
docker restart $(docker ps -q)                                 #重启所有正在运行的容器
docker stop $(docker ps -a -q)                                 #停止所有容器
docker rm $(docker ps -a -q)                                   #删除所有容器
docker rm $(docker ps -f "status=exited" -q)                   #删除所有退出的容器
docker rm $(docker stop $(docker ps -a -q))                    #停止并删除所有容器
docker start $(docker ps -a -q)                                #启动所有容器
docker rmi $(docker images -a -q)                              #删除所有镜像
docker exec -it ${CONTAINER NAME/ID} /bin/bash                 #进入容器内
docker exec -it ${CONTAINER NAME/ID} ping ${CONTAINER NAME/ID} #一个容器ping另外一个容器
docker top ${CONTAINER NAME/ID}                                #显示一个容器的top信息
docker stats                                                   #显示容器统计信息(正在运行)
    docker stats -a                                            #显示所有容器的统计信息(包括没有运行的)
    docker stats -a --no-stream                                #显示所有容器的统计信息(包括没有运行的) ,只显示一次
    docker stats --no-stream | sort -k8 -h                     #统计容器信息并以使用流量作为倒序
docker system 
      docker system df           #显示硬盘占用
      docker system events       #显示容器的实时事件
      docker system info         #显示系统信息
      docker system prune        #清理文件

docker file

img

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

列出最近创建的5个容器信息。

FROM:基础镜像,当前镜像基于那个镜像的
 
MAINTAINER:镜像维护者的姓名和邮箱地址
 
RUN: 执行过程中需要执行的linux命令
 
WORKDIR:指定容器后,终端默认登陆的进来工作目录,一个落脚点
 
ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
 
COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<原路径>的文件/目录复制到新的一层的镜像内的<目标路径位置>  1、COPY src dest   2、COPY ["src","dest"]
 
VOLUME: 通过 VOLUME 指令创建的挂载点,本地可修改 直接生效,多个容器可以共用实现同步效果 (执行Dockerfile文件后直接生成文件路径,实现本地数据进行挂载)
 
ENV:定义环境变量的同时,可以引用已经定义的环境变量
 
EXPOSE:告诉 Docker 服务端容器暴露的端口号,供互联系统使用
 
CMD:命令设置容器启动后默认执行的命令及其参数,但CMD设置的命令能够被docker run命令后面的命令行参数替换
 
ENTRYPOINT:指定启动容器时执行的命令, ENTRYPOINT的目的和CMD一样,指定容器启动程序及参数 命令附加不覆盖
 
ONBUILD: 当构建一个被继承的Dockfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
 
ENV:用来构建镜像过程中设置环境变量

.dockerignore 文件编写方法

.dockerignore 文件的写法和 .gitignore 类似,支持正则和通配符,具体规则如下:

  • 每行为一个条目;
  • # 开头的行为注释;
  • 空行被忽略;
  • 构建上下文路径为所有文件的根路径;

文件匹配规则具体语法如下:

规则 行为
/temp 匹配根路径下一级目录下所有以 temp 开头的文件或目录
//temp* 匹配根路径下两级目录下所有以 temp 开头的文件或目录
temp? 匹配根路径下以 temp 开头,任意一个字符结尾的文件或目录
**/*.go 匹配所有路径下以 .go 结尾的文件或目录,即递归搜索所有路径
*.md !README.md 匹配根路径下所有以 .md 结尾的文件或目录,但 README.md 除外
posted @ 2021-10-29 14:11  李广龙  阅读(46)  评论(0)    收藏  举报