记录一些学习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