Administrator
发布于 2022-02-26 / 20 阅读
0

Docker备忘录

一、Docker的命令

行为命令例子
查询镜像docker searh docker searh ubuntu
拉取镜像docker pull docker searh ubuntu
通过Dockerfile创建imagedocker build -t xxx .docker build -t bigdata-ubuntu .
查看有哪些镜像docker imagesdocker images
查看有哪些运行的容器docker ps (类似linux)docker ps
查看共有哪些容器docker ps -adocker ps -a
开启镜像(创建容器并运行)docker run xx(如果没有镜像,那么会自动下载) docker run -d的-d代表后台运行docker run -d -p 10022:22 --name salve1 bigdata-ubuntu
关闭容器docker stop (docker ps查看容器id)docker stop 818ndyf
执行镜像的命令docker exec -it <命令>docker exec -it 818ndyf /bin/bash
删除容器docker rm docker rm 818ndyf
删除镜像docker rmi docker rm tdyflzyr66
在host和docker之间拷贝文件docker cp docker cp 818ndyf:/opt/lampp/README-wsrep /opt/
登陆镜像仓库docker login -u docker login -u catofzpp,执行命令输入账密
上传镜像到私有仓库docker push docker push catofzpp/jenkins
docker提交docker commit docker commit -a "作者:catofzpp" -m "文字说明" <容器id> <镜像名jenkins:latest>

二、Dockerfile的命令

行为命令
指定基础镜像FROM
执行命令(在容器里)RUN
添加文件(可以添加远程的文件)ADD
拷贝文件COPY
执行命令(容器入口)CMD
暴露端口(服务器监听的端口)EXPOSE
指定路径WORKDIR
维护者MAINTAINER
设定环境变量ENV
容器入口,容器启动时执行命令ENTRYPOINT
指定用户USER
指定挂在的卷VOLUME

三、Dockerfle使用

1. 添加本地文件到docker

ADD可以将文件拷贝到container的文件系统对应的路径,所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0。如果文件是可识别的压缩格式,则docker会帮忙解压缩。

如果要ADD本地文件,则本地文件必须在 docker build ,指定的目录下。

如果要ADD远程文件,则远程文件必须在 docker build ,指定的目录下。比如:

docker build github.com/creack/docker-firefox   

docker-firefox目录下必须有Dockerfile和要ADD的文件。

ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。

2. 进入目标容器

docker exec -it  /bin/bash

3. 设置container启动时执行的操作

(1)CMD:

设置指令,用于container启动时指定的操作。该操作可以是执行自定义脚本,也可以是执行系统命令。该指令只能在文件中存在一次,如果有多个,则只执行最后一条。

三种格式:

CMD ["executable","param1","param2"] (like an exec, this is the preferred form)  

CMD command param1 param2 (as a shell) 

当Dockerfile指定了ENTRYPOINT,可使用:CMD ["param1","param2"] (as default parameters to ENTRYPOINT) 

(2)ENTRYPOINT:

设置指令,指定容器启动时执行的命令,可以多次设置,但是只有最后一个有效。

ENTRYPOINT ["executable", "param1", "param2"] (like an exec, the preferred form)  

ENTRYPOINT command param1 param2 (as a shell) 

(3)区别

Container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD。CMD主要用于container时启动指定的服务,当Docker run command的命令匹配到CMD command时,会替换CMD执行的命令。如下Dockerfile:

CMD echo hello world

运行:

fy@fy-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd

hello world

一旦命令匹配:

fy@fy-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd echo hello fy

hello fy

4. 设置container容器的用户

USER:使用哪个用户跑container。

# 指定memcached的运行用户  

ENTRYPOINT ["memcached"]  

USER daemon  
或  
ENTRYPOINT ["memcached", "-u", "daemon"]  

5. 切换目录

WORKDIR:切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效

6. 目录挂载

VOLUME:可以将本地文件夹或者其他container的文件夹挂载到container中。

四、通过Dockerfile定义自己的docker文件

1. touch Dockerfile,名字就得是Dockerfile
2. vim Dockerfile 
输入内容:
FROM alpine:latest //alpine,相当于JAVAWEB里的BASE类
MAINTAINER fy //标识作者
CMD echo 'hello docker' //干啥
3. docker build -t xx .//-t是给他个标签, .代表实际给他的东西  
4. docker run -it -p 8989:8080 fy/jenkins

五、docker常见问题

  • docker的pull下来的容器或者镜像都是临时的,如果不提交,那么不能保存之前的修改。
  • 镜像相当于类,容器相当于类创建的对象。
  • docker --help可以在任何命令下执行,相当于docker exec --help查看exec的用法