docker学习笔记

Posted by DanteYu on March 29, 2021

记录一些学习docker的基础知识和常用命令。


镜像操作

  • 查看本地images - docker image ls
  • 拉docker hub上的image - docker image pull node:8.16.1 docker pull node:latest
  • 有了Dockerfile后,就可以编译打包我们的运行环境 - docker image build -t komavideo/mynode:v01 .

容器操作

  • 在环境中运行应用 - docker container run komavideo/mynode:v01
  • 运行制定命令 - docker container run node:latest ls /etc/
  • 在有entrypoint为node情况下,可以直接运行node进程 - docker container run mynode:latest -v
  • 在有entrypoint为node情况下,可以直接运行node进程和js脚本 - docker container run -it mynode:latest -e "console.log('helo')"
  • 交互式的运行 - docker container run --rm -it python:3.8.0-alpine3.10
    • i, –interactive Keep STDIN open even if not attached
    • t, –tty Allocate a pseudo-TTY
    • rm Automatically remove the container when it exits
  • 启动nignx - docker container run --name myweb -d -p 8088:80 nginx:1.17.5-alpine
    • 容器内的80端口mapping到本地的8088端口
    • -d, –detach Run container in background and print container ID
    • –name string Assign a name to the containe
    • -p, –publish list Publish a container’s port(s) to the host
  • 使用本地文件启动nignx - docker container run --name myweb -d -p 8088:80 -v /home/lcadmin/myweb:/usr/share/nginx/html:ro nginx:1.17.5-alpine 把本地目录mapping到容器内目录,这样容器内就是本地的文件内容 ro是read only
  • 启动PostgreSql数据库服务器 - docker run --name webdb -p 5432:5432 -e POSTGRES_USER=dbuser -e POSTGRES_PASSWORD=12345678 -d postgres:9.6.16-alpine
  • 停止容器服务 - docker container stop containername
  • 启动存在的容器 - docker container start containername
  • 列出所有容器 - docker container ls -a
  • 删除指定容器 - docker container rm -f containername
  • 删除所有容器 - docker container prune
  • 进入数据库实例的bash - sudo docker exec -it webdb /bin/bash
  • 建立Redis永久化卷标 - docker volume create --name v_redis_data
  • 绑定卷的查看 - docker inspect container_instance_name

创建container,编写Dockerfile

FROM node:8.16.1    #使用此镜像
FROM python:3.8

RUN mkdir /src      #在环境初始化时,创建一个子目录
RUN pip3 install numpy
RUN mkdir -p /workfolder

ADD . /app #将当前目录映射到容器内/app目录

COPY helo.js /src	#copy我本地的文件到新建的子目录里面 
COPY ./main.py /workfolder/

ENTRYPOINT ["node"]  #使用 ENTRYPOINT 指令指定执行的进程 运行此镜像后,node进程就启动好了,可以直接带参数`-v`显示node版本号
CMD ["-v"]	#搭配entrypoint node,可以直接显示node版本号

CMD ["node", "/src/helo.js"]	#在环境内跑node命令及其参数  运行此镜像后 该命令自动运行
CMD [ "python", "/workfolder/main.py" ]


Docker-compose


```yml
version: '3.8'
services:
  myweb:
    build: .  #本地编译打包
    ports: 
    - "8088:5000"  #端口号mapping
    volumes:   #本地卷mapping
    - .:/app
version: '3.8'
services:
  myweb:
    build: .
    ports:
    - "8088:5000"
    volumes:
    - .:/app
    depends_on:   #依赖服务
    - myredis
  myredis:
    image: redis:6.0.5-alpine
version: '3'
services:
  node:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./app:/app
    command: sh -c "cd react-sample && yarn start"
    ports:
      - "3000:3000"
    stdin_open: true # 标准输入

```

  • 容器启动 - docker-compose up
  • 容器重新编译后启动 - docker-compose up --build
  • 容器启动(精灵线程) - docker-compose up -d --build
  • 查询容器状态 - docker-compose ps
  • 执行myweb容器内的命令 - docker-compose run myweb top
  • 查看容器输出日志 - docker-compose logs -f myweb
  • 容器停止 - docker-compose stop
  • 容器停止+消除(容器+网络) - docker-compose down
  • 容器停止+消除(容器+网络+镜像) - docker-compose down --rmi all