常用操作笔记

场景1: 当下载了一个镜像,想查看image镜像里面一些信息.

1.拉取一个镜像

$ docker pull php:alpine3.7

2.想知道镜像里面的php版本

$ docker run -it --rm php:alpine3.7 php -v

3.想对这个镜像里信息了解的更多,也就是得执行多条语句

$ docker run -it --rm php:alpine3.7 sh -c "php -v && php -m"

4.如果想临时进去操作一下,查看更多的信息,加上sh,即可, 在容器中exit退出的时候,容器也随之消失

$ docker run -it --rm php:alpine3.7 sh

你进行docker ps 查看正在运行的容器的时候,发现并没有运行的容器.原因是因为 --rm, --rm, 指定容器停止后自动删除容器(不支持以docker run -d启动的容器),所以可以使用此方式来查看自己拉取容器里的一些信息.

备注:

-i:以交互模式运行容器,通常与 -t 同时使用;

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

场景2: 当你使用了一个已经存在的开发框架的docker环境,那么你需要的是使用本地开发代码,一遍开发一遍使用docker里的环境测试

以swoft为例,后台运行

$ docker run -d -p 80:80 --name swoft swoft/swoft:latest

其实就是在启动的时候把自己的开发本地目录映射到容器内的web目录即可.-v参数

$ docker run -p 80:80 --name swoft -d \
-v /home/revin/swoft/:/var/www/swoft \
swoft/swoft:latest

场景3. 已经有了dockerfile文件,拿swoole开发为例

1.构建Dockerfile

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的名字

$ docker build -t swoole-2.2 .

构建完成后就可以通过docker images指令查看镜像是否创建成功。

并映射了本地开发环境.

$ docker run -it --name testpro --rm \
-v /temp/test/swoole:/myapps \
-p 9501:9501 \
swoole-2.2 sh

上面的代码是运行一个容器,并进入容器,但是退出后容器会消失.

$ 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.当修改了代码,或者配置文件则需要重启容器

$ docker restart testpro

4.查看容器里的日志

$ docker logs testpro

5.当开发时,需要了解容器的ip地址等信息

$ docker inspect swoft

6.停止容器

$ docker stop testpro

其他的命令则--help进行查看

场景4. 构建自己的image镜像。

当你使用 别人的基础镜像,你可以镜像进行一些修改安装。

1、使用镜像启动一个容器

2、构建一个新的images

docker commit 容器名 image镜像名:tag

场景5:容器宿主机间相互拷贝文件

docker cp命令

文档:https://docs.docker.com/engine/reference/commandline/cp/

从容器中拷贝到主机:

docker cp tmp:/etc/nginx/nginx.conf /home/revin/nginx/conf/

也可以从宿主机拷贝到容器中

docker cp /home/revin/nginx/conf/ tmp:/etc/nginx/nginx.conf

不过一般情况下配置文件,只会挂载到容器中。

windows10 下

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