Docker镜像容器操作
帮助命令
docker version #显示docker的版本信息。docker info #显示docker的系统信息,包括镜像和容器的数量docker 命令 --help #帮助命令
镜像命令
docker images #查看所有本地主机上的镜像 可以使用docker image ls代替docker search #搜索镜像docker pull #下载镜像docker pull 镜像名[:tag],如果不写tag,默认就是latesdocker rmi #删除镜像docker rmi -f 镜像id #删除指定id的镜像docker rmi -f $(docker images -aq) #删除全部的镜像
docker images #查看所有本地的主机上的镜像#解释#REPOSITORY # 镜像的仓库源#TAG # 镜像的标签(版本) ---lastest 表示最新版本#IMAGE ID # 镜像的id#CREATED # 镜像的创建时间#SIZE # 镜像的大小#可选项Options:-a, --all Show all images (default hides intermediate images) #列出所有镜像-q, --quiet Only show numeric IDs # 只显示镜像的id#docker images -a #列出所有镜像详细信息#docker images -aq #列出所有镜像的id
容器命令
docker run 镜像id #新建容器并启动docker ps 列出所有运行的容器 docker container listdocker rm 容器id #删除指定容器docker start 容器id #启动容器docker restart 容器id #重启容器docker stop 容器id #停止当前正在运行的容器docker kill 容器id #强制停止当前容器
新建容器并启动
docker run [可选参数] image | docker container run [可选参数] image#参书说明--name="Name" #容器名字 tomcat01 tomcat02 用来区分容器-d #后台方式运行-it #使用交互方式运行,进入容器查看内容-p #指定容器的端口 -p 8080(宿主机):8080(容器)-p ip:主机端口:容器端口-p 主机端口:容器端口(常用)-P(大写) 随机指定端口
列出所有运行的容器
docker ps 命令 #列出当前正在运行的容器-a, --all #列出当前正在运行的容器 + 带出历史运行过的容器-n=?, --last int #列出最近创建的?个容器?为1则只列出最近创建的一个容器-q, --quiet #只列出容器的编号
退出容器
exit #容器直接退出ctrl +P +Q #容器不停止退出 ---注意:这个很有用的操作
删除容器
docker rm 容器id #删除指定容器,不能删除正运行的容器,若强制删除 rm -rfdocker rm -f $(docker ps -aq) #删除所有的容器docker ps -a -q|xargs docker rm #删除所有的容器
启动和停止容器的操作
docker start 容器id #启动容器docker restart 容器id #重启容器docker stop 容器id #停止当前正在运行的容器docker kill 容器id #强制停止当前容器
常用其他命令
后台启动命令docker run -d 镜像名查看日志docker logs --help#模拟日志docker run -d centos /bin/sh -c "while true;do echo 6666;sleep 1;done"#显示日志-tf #显示日志信息(一直更新)--tail number #需要显示日志条数docker logs -t --tail n 容器id #查看n行日志docker logs -ft 容器id #跟着日志查看容器中进程信息docker top 容器id查看镜像的元数据docker inspect 容器id进入当前正在运行的容器docker exec -it 容器id bashshell#方式二docker attach 容器id#docker exec #进入当前容器后开启一个新的终端,可以在里面操作(常用)#docker attach # 进入容器正在执行的终端从容器内拷贝到主机上docker cp 容器id:容器内路径 主机目的路径docker run -it --rm 镜像名 一般是用来测试,用完就删除commit镜像docker commit 提交容器成为一个新的副本#命令和git原理类似docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[版本TAG]docker commit -a="kuangshen" -m="add webapps app" 容器id tomcat02:1.0

容器数据卷
三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口例:# 获取mysql镜像[root@iz2zeak7sgj6i7hrb2g862z home]# docker pull mysql:5.7# 运行容器,需要做数据挂载 #安装启动mysql,需要配置密码的,这是要注意点!# 参考官网hubdocker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag#启动我们得-d 后台运行-p 端口映射-v 卷挂载-e 环境配置-- name 容器名字docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql03 mysql:5.7# 启动成功之后,我们在本地使用sqlyog来测试一下# sqlyog-连接到服务器的3306--和容器内的3306映射# 在本地测试创建一个数据库,查看一下我们映射的路径是否ok!
Dockerfile
Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令,每个命令都是一层!
规则
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序
3、#表示注释
4、每一个指令都会创建提交一个新的镜像曾,并提交!
# 创建一个dockerfile文件,名字可以随便 建议Dockerfile# 文件中的内容: 指令(大写) + 参数$ vim dockerfile1FROM centos # 当前这个镜像是以centos为基础的VOLUME ["volume01","volume02"] # 挂载卷的卷目录列表(多个目录)CMD echo "-----end-----" # 输出一下用于测试CMD /bin/bash # 默认走bash控制台# 这里的每个命令,就是镜像的一层!# 构建出这个镜像-f dockerfile1 # f代表file,指这个当前文件的地址(这里是当前目录下的dockerfile1)-t caoshipeng/centos # t就代表target,指目标目录(注意caoshipeng镜像名前不能加斜杠‘/’). # 表示生成在当前目录下
$ docker build -f dockerfile1 -t caoshipeng/centos .Sending build context to Docker daemon 2.56kBStep 1/4 : FROM centoslatest: Pulling from library/centos8a29a15cefae: Already existsDigest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700Status: Downloaded newer image for centos:latest---> 470671670cacStep 2/4 : VOLUME ["volume01","volume02"] # 卷名列表---> Running in c18eefc2c233Removing intermediate container c18eefc2c233---> 623ae1d40fb8Step 3/4 : CMD echo "-----end-----" # 输出 脚本命令---> Running in 70e403669f3cRemoving intermediate container 70e403669f3c---> 0eba1989c4e6Step 4/4 : CMD /bin/bash---> Running in 4342feb3a05bRemoving intermediate container 4342feb3a05b---> f4a6b0d4d948Successfully built f4a6b0d4d948Successfully tagged caoshipeng/centos:latest# 查看自己构建的镜像$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcaoshipeng/centos latest f4a6b0d4d948 About a minute ago 237MB
DockerFile的指令
FROM # from:基础镜像,一切从这里开始构建MAINTAINER # maintainer:镜像是谁写的, 姓名+邮箱RUN # run:镜像构建的时候需要运行的命令ADD # add:步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录WORKDIR # workdir:镜像的工作目录VOLUME # volume:挂载的目录EXPOSE # expose:保留端口配置CMD # cmd:指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代ENTRYPOINT # entrypoint:指定这个容器启动的时候要运行的命令,可以追加命令ONBUILD # onbuild:当构建一个被继承DockerFile这个时候就会运行onbuild的指令,触发指令COPY # copy:类似ADD,将我们文件拷贝到镜像中ENV # env:构建的时候设置环境变量!
DockerCompose
Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
下载地址: curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose添加操作权限:chmod +x /usr/local/bin/docker-compose查看:docker-compose --version安装pip: sudo pip install docker-compose
DockerCompose指令
version 指定本 yml 依从的 compose 哪个版本制定的build指定为构建镜像上下文路径context:上下文路径。dockerfile:指定构建镜像的 Dockerfile 文件名。args:添加构建参数,这是只能在构建过程中访问的环境变量。labels:设置构建镜像的标签。target:多层构建,可以指定构建哪一层。command 覆盖容器启动的默认命令。container_name 指定自定义容器名称,而不是生成的默认名称。environment 添加环境变量。expose 暴露端口,但不映射到宿主机,只被连接的服务访问。image 指定容器运行的镜像。restartno:是默认的重启策略,在任何情况下都不会重启容器。always:容器总是重新启动。on-failure:在容器非正常退出时(退出状态非0),才会重启容器。unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
DockerCompose命令
docker-compose up //启动yml文件定义的 containerdocker-compose up -d //后台运行docker-compose up --help //查看up帮助docker-compose -f docker-compose.yml up //-f 指定yml文件docker-compose stop //停止docker-compose startdocker-compose ls //查看docker-compose down //停止删除docker-compose psdocker-compose imagesdocker-compose exec {service_name} {bash}
