10分钟,快速学会docker
1 总体框图
2 快速入门
2.1 获取镜像
docker pull nginx
docker pull nginx:latest
2.2 查看本地镜像
docker images
2.3 运行镜像
docker run -d -p 80:80 nginx
-d 后台运行
-p 内外端口映射
2.4 查看正在运行的容器
docker ps
2.5 修改容器
docker exec -it xxxx bash
-it 接容器id
xxxx是容器ID的代号前两位
2.6 删除容器
docker rm -f xxx
xxx为容器ID
2.7 提交容器
docker commit xxx name
xxx为容器ID
2.8 通过dockerfile构建镜像跑成容器
- 新建dockerfile文件(写法自行查阅官方文档)
- 然后在当前目录新建index.html
- build打包成镜像,此时通过镜像运行容器,nginx的index文件显示为上述内容
2.9 保存文件和重新加载
保存
docker save name(镜像名称) > name(tar文件名称).tar
加载
docker load < name(tar文件名称).tar
2.10 其他摘抄
小狐狸的笔记
安装和常用CLI:
添加阿里云镜像:sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装命令:sudo yum install -y docker-ce docker-ce-cli containerd.io
启动命令:sudo systemctl start docker
添加当前用户到docker用户组:sudo usermod -aG docker $USER (需注销),newgrp docker (立即生效)
Helloworld:docker run hello-world (本地没有镜像的话会自动从远端仓库pull)
pull nginx 镜像:docker pull nginx(等效于nginx:latest)
运行:docker run -【d】(后台运行不阻塞shell) 【-p 80:80】(指定容器端口映射,内部:外部) nginx
查看正在运行:docker ps
删除容器:docker rm -f <container id(不用打全,前缀区分)>
进入bash:docker exec -it <container id(不用打全,前缀区分)> bash
commit镜像:docker commit <container id(不用打全,前缀区分)> <name>
查看镜像列表:docker images (刚才commit的镜像)
使用运行刚才commit的镜像:docker run -d <name>
使用Dockerfile构建镜像:docker build -t <name> <存放Dockerfile的文件夹>
删除镜像:docker rmi <name>
保存为tar:docker save <name> > <tar name>
从tar加载:docker load < <tar name>
一些启动参数:
后台运行容器:-d
容器内外端口映射:-p 内部端口号:外部端口号
目录映射:-v 'dir name' : <dir>
指定映像版本:<name>:<ver>
入门操作
增
删
改
查
3 多容器部署
3.1 运行nginx容器,并查看ip
docker run -d -p 80:80 --name mynginx nginx
docker ps
docker exec -it mynginx bash
cat /etc/hosts
172.17.0.2是容器的ip
然后我们退出(exit)然后又启动一个新的容器
3.2 运行alpine容器通过curl访问nginx
docker run -dit alpine
docker exec -it xxxx(容器id) sh
apk add curl
curl 172.17.0.2
3.3 通过–link参数
--link
把另一个容器映射到本容器里面(通过修改/etc/hosts文件)
3.4 三个容器的组织nginx、php、mysql
注意:创建顺序需要先mysql,然后启动php的时候link参数映射到mysql,同理类推~
这样对运维来说太麻烦了,有什么好方法吗?docker-compose
3.5 docker-compose
视频地址:https://www.bilibili.com/video/BV1Wt411w72h?from=search&seid=3688284699898465652
项目分为三个模块
- nginx
- php
- mysql
目录结构如下
使用方式
然后就启动完成了, 如下图
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
25b3b7498399 nginx:alpine "nginx -g 'daemon of…" 50 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp docker-compose-demo-1_nginx_1
c8aa834d8a6f devilbox/php-fpm:8.0-work-0.106 "/docker-entrypoint.…" 50 seconds ago Up 3 seconds 9000/tcp docker-compose-demo-1_php_1
de051f9b9569 mysql:5.6 "docker-entrypoint.s…" 50 seconds ago Up 3 seconds 3306/tcp docker-compose-demo-1_mysql_1
3.6 代码解析:
- 新建俩文件夹
conf
html
- 然后在conf/下面建立nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
}
}
- 然后写docker-compose.yml
version: "3"
services:
nginx:
image: nginx:alpine
ports:
- 80:80
volumes:
- ./html:/usr/share/nginx/html
- ./conf/nginx.conf:/etc/nginx/nginx.conf
php:
image: devilbox/php-fpm:8.0-work-0.106
volumes:
- ./html:/var/www/html
mysql:
image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=123456
- 在该目录下运行docker-compose up -d (-d 后台启动)
流程:
4 参考
【docker入门】10分钟,快速学会docker
【docker入门2】实战~如何组织一个多容器项目docker-compose
【docker compose演示程序】