docker常用命令

104 阅读3分钟
 docker info 查看Docker信息,检测是否正确安装

docker attach 连接到正在运行的容器
docker exec -it e89ca7aa529b /bin/bash 连接到正在运行的容器
docker exec -it e89ca7aa529b 命令 在容器外面操作容器

docker inspect 用于查看镜像和容器的(镜像和容器都可以)详细信息,默认会列出全部信息,可以通过--format参数来指定输出的模板格式

docker ps 默认显示当前正在运行中的容易
-a 查看包括已经停止的所有容器
-l 显示最新启动的一个容器(包括已停止的)
-n 显示N个

docker images 列出机器上的镜像

docker search NAME 搜索官方镜像和所有个人公共镜像

docker pull 拉取镜像

docker push 推送镜像

docker run -it --name mytest centos:centos6 /bin/bash 启动镜像并进入,取名叫mytest

docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 2; done" 后台运行一个镜像,并输出hello world,程序结束,容器自动关闭

docker run --name nginx_test \
> -v /tmp/docker:/usr/share/nginx/html:ro \
> -p 80:80 -d \
> nginx:1.7.6
启动容器nginx:1.7.6, 取名nginx_test,把容器里的/tmp/docker目录挂载到/usr/share/nginx/html,只读,容器80端口映射到外面80端口
-v目录挂载
-p指定端口映射
-P端口随机映射
--volumes-from 挂载共享
docker run -it --name wei wei --volumes-from 目标容器 镜像

docker run -d --name weweimysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=sudy12344 b8fd9553f1f0

mysql8无法链接
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码
FLUSH PRIVILEGES; #刷新权限

docker commit <container> 把容器制作成镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 镜像名:[标签]
docker commit -a="weiwei" -m="weiwei second images" ed342a34b747 weiwei/mytomcat:1.3

docker start $CONTAINER_ID 开启容器
docker stop $CONTAINER_ID 停止容器
docker restart $CONTAINER_ID 重启容器

docker rm <container_id/contaner_name> 删除容器
docker rm $(docker ps -aq) 删除所有容器

docker rmi <image_id/image_name ...> 删除镜像

docker rmi $(docker images -qa) 删除所有镜像

docker build 从Dockerfile和上下文来创建镜像
docker build [OPTIONS] PATH | URL | -
-t 镜像名和版本
-f dockerfile路径
如果PATH直接就是一个单独的Dockerfile文件则可以不需要上下文;如果URL是一个Git仓库地址,那么创建image的过程中会自动git clone一份到本机的临时目录,它就成为了本次build的上下文

docker top <container_id/container_name> 查看容器中正在运行的进程

docker tag imageid name:tag 修改镜像名字

docker cp /www/runoob 96f7f14e99ab:/www/ 从主机往容器中拷贝
docker cp 96f7f14e99ab:/www /tmp/ 将容器中文件拷往主机



dockerfile保留字指令

FROM:基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:容器构建时需要运行的命令
EXPOSE:当前容器对外暴露的端口号
WORDIR:指定在容器创建后,终端默认登录进来工作目录,一个落脚点
ENV:用来在构建镜像过程中设置环境变量。
举例:ENV MY_PATH /usr/mytest
ENV这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前指定了环境变量前缀一样;也可以在其他指令中直接使用这些环境变量,比如WORKDIR $MY_PATH

ADD:将宿主机目录下的文件拷贝到镜像里面并且ADD命令会自动处理URL和解压tar压缩包
COPY:类似ADD,拷贝文件和目录到镜像中,但是它只是拷贝,不会自动处理URL和解压tar压缩包。COPY将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置。
VOLUME:容器数据卷,用于数据保存和持久化工作
CMD:指定一个容器启动时要运行的命令。dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换。
CMD指令的格式和RUN类似,也是两种格式:
a) shell格式:CMD <命令>
b) exec格式:CMD ['可执行文件',‘参数1’,‘参数2’....]
c) 参数列表格式:CMD ['参数1',‘参数2’...],在指定了ENTRYPOINT指令后,用CMD指定具体的参数。

ENTRYPOINT:指定一个容器启动时要运行的命令
CMD和ENTRYPOINT都是指定一个容器启动时要运行的命令,但是 如果dockerfile中可以有多个CMD指令,只有最后一个生效 ,CMD会被docker run之后的参数替换 ;而有多个ENTRYPOINT指令,每个指令都生效,这就是CMD和ENTRYPOINT的区别。

当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后,父镜像的onbuild被触发。






$ sudo docker login --username=18351976936 registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/wwei/mycentos:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/wwei/mycentos:[镜像版本号]