基本概念
镜像Image 类似root文件系统
容器 Container
仓库 Repository
客户端-服务器(c/s)架构模式 使用远程api和创建docker容器
拉去镜像 docker pull centos:7
启动 docker run -I -t centos:7 /bin/hash
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交
cat /proc/version和ls分别查看当前系统的版本信息和当前目录下的文件列表
Mysql 等服务是一个容器
启动一个mysql 容器
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
列出运行的容器 docker container ls
列出所有容器 包括停止运行的容器 docker container —all
杀死容器 docker container kill 【container ID】
删除容器文件 docker container rm [containerID]
dockerignore
exit 退出
启动容器 docker run -d ubuntu:15.10 /bin/sh -c “蚊子”
查看容器运行 docker ps
查看最后一次创建的容器 docker ps -l
标准输出 docker logs 2b1b7a428627id
停止容器 docker stop <容器 Id>
启动重启restart docker start 《容器id or name》
删除容器 docker rm -f <容器 id>
清除所有处理终止状态的容器 docker container prune
查看所有命令 docker
查看容器 docker inspect id
启动容器 docker start 《容器 id》
后台运行docker run -itd --name ubuntu-test ubuntu /bin/bash //-d指定运行模式 -d 参数默认不会进入容器
重启容器 docker restart 《容器 id》
进入容器 退出停止docker sttach id
退出不停止 docker exec -it 《容器id》/bin/hash
导出容器 docker export <容器id> ubuntu.tar 导出id快照到本地文件ubuntu.tar
导入 使用 docker import 从容器快照文件中再导入为镜像
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
通过指定 URL 或者某个目录来导入 docker import http://example.com/exampleimage.tgz example/imagerepo
运行web应用 docker pull training/webapp #载入镜像
Docker run -d -P training/webapp python app.py
-d 让容器在后台运行
-P 将容器内部使用的网络端口yin射到主机
修改端口为5000 docker run -d -p 5000:5000 training/webapp python app.py
查看端口 docker port id或者name
查看web应用进程 docker top <name or id>
检查底层信息 docker inspect 《name or id》
拉取httpd 镜像 docker pull httpd
启动httpd。 docker run httpd
删除镜像 docker rmi 《name 》
更新镜像
docker run -t -i ubuntu:15.10 /bin/bash 先创建容器
apt-get update 更新
exit 退出
提交容器副本 docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m: 提交信息描述
-a: 指定镜像作者
E28ed… : 容器id
runoob/ubuntu:v2:创建的目标镜像名
查看镜像 docker images
使用新镜像启动一个容器 ocker run -t -i runoob/ubuntu:v2 /bin/bash
镜像添加新标签 docker tag 《容器 name 》《新name runoob/centos:dev》
查询 仓库镜像 docker search centos
Dockerfile 文件配置
FROM node:latest 依赖的镜像
RUN mkdir -p /home/www/express run表示执行操作
WORKDIR /home/www/express 工作目录路径
COPY . /home/www/express 拷贝到容器中路径
RUN npm install 执行操作
EXPOSE 3000:3000 容器端口暴露出来
ENTRYPOINT ["npm","run”]。大概是吧命令暴露一下能用吧
CMD ["start"] 启东市容器运行到命令
写好后 执行下面命令
docker build -t express . -t是自定义名称 后面的.不能拉下
test % $(pwd) 获取test文件夹绝对路径
pwd 获取路径
test % sudo $(pwd)
Yin射卷到容器中 进行同步修改 docker run -d -v /Users/wangguan/test:/home/www/express express/latest
docker ps -a
docker logs cfb8df095db9。获取所有运行容器 通过id查询logs报错
docker run -d -p 3000:3000 express 将3000端口暴露出来
docker run -d -p 3001:3000 -v /Users/wangguan/test:/home/www/express express 再跑一个 换个端口
docker run -d -p 3001:3000 -v /Users/wangguan/nodeTabble:/home/www/express2 node22
列出所有容器id docker ps -aq
停止所有容器 stop $(docker ps -aq)
删除所有容器 rm $(docker ps -aq)
删除所有镜像 rm $(docker images -q)
复制文件 docker cp mycontainer: /opt/file.txt /optloacl/docker cp /opt/local/file.tex m
删除所有不使用的镜像 docker image prune —force
Docker image prune -f -a`
删除所有停止的容器 docker container prune
Dockfile 的作用就是把自己写的程序转成 image 镜像
$ docker container run -p 8000:3000 -it koa-demo /bin/bash
# 或者
$ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
-p参数:容器的 3000 端口映射到本机的 8000 端口。
-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
/bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
如果一切正常,运行上面的命令以后,就会返回一个命令行提示符。
root@66d80f4aaf1e:/app#
docker ps -a 查询所有容器
Docker logs 《容器id》 获取logs 报错信息
拷贝文件到本地 docker cp 96f7f14e99ab:/www /tmp/
映射 -v 路径/径路 -p 90:80 镜像名称
不桶 image
/opt/data / sha
/Users/wangguan/usr/share/nginx/html
/usr/share/nginx/html
本地操纵一个镜像 可以
直接使用dockerfile 编写 build时 用镜像
RUN echo ‘<h1>33333</h1> > /usr/share/nginx/html/index.html
docker-compose 编排微服务
docker run -itd --name mysql2 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
拷贝
docker cp 容器id:/var/lib/mysql /Users/wangguan/app/sql
docker-compose.yml
version: '3.0' #compose版本写错了报错
services: #项目名称1自定义
nginx: #nginx 名字自定义
restart: always #开机自执行
image: nginx #会自己找nginx镜像
container_name: nginx2 #自定义名称
ports: #把80端口用90代替
- 90:80
mysql:
restart: always
command: --default-authentication-plugin=mysql_native_password
image: mysql
container_name: mysql2
ports:
- 3306:3306
volumes:
- /Users/wangguan/app/sql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: '123456'
node:
build: /Users/wangguan/nodeTabble #指定dockerfile 所在目录 会自己过去执行dockerfile里面的命令
# command: bash -c "npm start"
volumes:
- .:/usr/src/app
# - /usr/src/app/node_modules
ports:
- "192.168.1.18:3001:3000"
docker-compose up -d
Starting nginx2 ... done