场景1: 当下载了一个镜像,想查看image镜像里面一些信息.
1.拉取一个镜像
Copy $ docker pull php:alpine3.7
2.想知道镜像里面的php版本
Copy $ docker run -it --rm php:alpine3.7 php -v
3.想对这个镜像里信息了解的更多,也就是得执行多条语句
Copy $ docker run -it --rm php:alpine3.7 sh -c "php -v && php -m"
4.如果想临时进去操作一下,查看更多的信息,加上sh,即可, 在容器中exit退出的时候,容器也随之消失
Copy $ docker run -it --rm php:alpine3.7 sh
你进行docker ps 查看正在运行的容器的时候,发现并没有运行 的容器.原因是因为 --rm
, --rm, 指定容器停止后自动删除容器(不支持以docker run -d启动的容器),所以可以使用此方式来查看自己拉取容器里的一些信息.
备注:
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
场景2: 当你使用了一个已经存在的开发框架的docker环境,那么你需要的是使用本地开发代码,一遍开发一遍使用docker里的环境测试
以swoft为例,后台运行
Copy $ docker run -d -p 80:80 --name swoft swoft/swoft:latest
其实就是在启动的时候把自己的开发本地目录映射到容器内的web目录即可.-v参数
Copy $ docker run -p 80:80 --name swoft -d \
-v /home/revin/swoft/:/var/www/swoft \
swoft/swoft:latest
场景3. 已经有了dockerfile文件,拿swoole开发为例
1.构建Dockerfile
Copy FROM php:alpine3.7
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.7/main > /etc/apk/repositories && \
echo http://mirrors.ustc.edu.cn/alpine/v3.7/community >> /etc/apk/repositories
RUN apk update && apk upgrade
RUN apk add m4 autoconf make gcc g++
RUN apk add linux-headers
ADD ./install/swoole-2.2.0.tgz /tmp/
RUN cd /tmp/swoole-2.2.0 && phpize && ./configure && make && make install
RUN docker-php-ext-enable swoole
CMD ["php","-m"]
ADD 和COPY的不同之处在于Add 可以在里面帮你自动解压缩.
2.docker build
指令构建Docker镜像
-t 构建后iamge的名字
Copy $ docker build -t swoole-2.2 .
构建完成后就可以通过docker images
指令查看镜像是否创建成功。
并映射了本地开发环境.
Copy $ docker run -it --name testpro --rm \
-v /temp/test/swoole:/myapps \
-p 9501:9501 \
swoole-2.2 sh
上面的代码是运行一个容器,并进入容器,但是退出后容器会消失.
Copy $ docker run --name testpro \
-v /temp/test/swoole:/myapps \
-p 9501:9501 \
-d swoole-2.2
上面的代码是后台运行一个容器,可以通过docker exec -it swoft bash
进入容器进行交互.(alpine中无bash,可以使用sh)
3.当修改了代码,或者配置文件则需要重启容器
Copy $ docker restart testpro
4.查看容器里的日志
Copy $ docker logs testpro
5.当开发时,需要了解容器的ip地址等信息
Copy $ docker inspect swoft
6.停止容器
Copy $ docker stop testpro
其他的命令则--help
进行查看
场景4. 构建自己的image镜像。
当你使用 别人的基础镜像,你可以镜像进行一些修改安装。
1、使用镜像启动一个容器
2、构建一个新的images
Copy docker commit 容器名 image镜像名:tag
场景5:容器宿主机间相互拷贝文件
docker cp命令
文档:https://docs.docker.com/engine/reference/commandline/cp/
从容器中拷贝到主机:
Copy docker cp tmp:/etc/nginx/nginx.conf /home/revin/nginx/conf/
也可以从宿主机拷贝到容器中
Copy docker cp /home/revin/nginx/conf/ tmp:/etc/nginx/nginx.conf
不过一般情况下配置文件,只会挂载到容器中。
windows10 下
Copy docker volume create portainer_data
docker run -d -p 8000:8000 -p 10001:9000 --name portainer --restart always -v \\.\pipe\docker_engine:\\.\pipe\docker_engine -v portainer_data:C:\data portainer/portainer
docker volume create rabbitmq_data
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq3.8 -v rabbitmq_data:/var/lib/rabbitmq rabbitmq:3-management
docker volume create mongodb_data
docker run -d -p 27017:27017 --name mongodb -v mongodb_data:/data/db mongo
docker volume create redis_data
docker run -d -p 27017:27017 --name mongodb -v mongodb_data:c:\data\db mongo
# docker network create esnet (linux)
docker network create --driver nat esnet
docker volume create elasticsearch_data
docker run -d --name elasticsearch --net esnet -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e "http.cors.enabled=true" -e "http.cors.allow-origin=*" -v elasticsearch_data:/usr/share/elasticsearch/data elasticsearch:7.8.1
#header
docker run -d -p 9100:9100 --name elasticsearch-manager mobz/elasticsearch-head:5-alpine