一、Docker的命令
行为 | 命令 | 例子 |
---|---|---|
查询镜像 | docker searh | docker searh ubuntu |
拉取镜像 | docker pull | docker searh ubuntu |
通过Dockerfile创建image | docker build -t xxx . | docker build -t bigdata-ubuntu . |
查看有哪些镜像 | docker images | docker images |
查看有哪些运行的容器 | docker ps (类似linux) | docker ps |
查看共有哪些容器 | docker ps -a | docker ps -a |
开启镜像(创建容器并运行) | docker run xx(如果没有镜像,那么会自动下载) docker run -d的-d代表后台运行 | docker run -d -p 10022:22 --name salve1 bigdata-ubuntu |
关闭容器 | docker stop | 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可以将文件
如果要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的用法