1.docker命令
启动docker
systemctl start docker
检查docker状态
systemctl status docker
停止docker
systemctl stop docker
重启docker
systemctl restart docker
开机自动启动docker
systemctl enable docker
查看镜像
docker images
搜索镜像
docker search redis
拉取镜像(下载)
docker pull redis:5.0
删除镜像
docker rmi redis
查看容器
运行容器 docker ps
全部容器 docker ps -a
创建容器
docker run -it --name=c1 centos:7 /bin/bash
进入容器
docker exec -it c1 /bin/bash
启动容器
docker start c1
停止容器
docker stop c1
删除容器
docker rm c1
查看容器信息
docker inspect c1
思考:
docker容器删除后,在容器中产生的数据也会随之销毁吗?不是
docker容器和外部机器可以直接交换文件吗?不能
容器之间想要进行数据交互,怎么办?挂载
数据卷
数据卷是宿主机的一个目录或文件
当容器目录和数据卷目录绑定之后,对方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷
配置数据卷(创建容器时)
docker run ... -v 宿主机目录(文件):容器内目录(文件)...
注意:目录必须是绝对路径,会自动创建文件夹
例如:
docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash
2. mysql部署
拉取镜像
docker pull mysql
创建容器,设置端口映射、目录映射
# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3306:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
- 参数说明:
- -p 3307:3306:将容器的 3306 端口映射到宿主机的 3306 端口。
- -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
- -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
- -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
- -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
3.部署tomcat
- 搜索tomcat镜像
docker search tomcat
- 拉取tomcat镜像
docker pull tomcat
- 创建容器,设置端口映射、目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
-
参数说明:
-
**-p 8080:8080:**将容器的8080端口映射到主机的8080端口
**-v $PWD:/usr/local/tomcat/webapps:**将主机中当前目录挂载到容器的webapps
-
4.部署nginx
- 搜索nginx镜像
docker search nginx
- 拉取nginx镜像
docker pull nginx
- 创建容器,设置端口映射、目录映射
# 在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
vim nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
- 参数说明:
- -p 80:80:将容器的 80端口映射到宿主机的 80 端口。
- -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的 /conf/nginx.conf 挂载到容器的 :/etc/nginx/nginx.conf。配置目录
- -v $PWD/logs:/var/log/nginx:将主机当前目录下的 logs 目录挂载到容器的/var/log/nginx。日志目录
5.部署redis
- 搜索redis镜像
docker search redis
- 拉取redis镜像
docker pull redis:5.0
- 创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0
6.Dockerfile
思考:
- Docker镜像的本质是什么?
Dockerfile是一个创建镜像所有命令的文本文件, 包含了一条条指令和说明, 每条指令构建一层, 通过docker build命令,根据Dockerfile的内容构建镜像,因此每一条指令的内容, 就是描述该层如何构建.有了Dockefile, 就可以制定自己的docker镜像规则,只需要在Dockerfile上添加或者修改指令, 就可生成docker 镜像.(分层的文件系统) - Docker中一个centos镜像为什么只有200m,而一个centos操作系统的iso文件要几个G?
复用 - Docker中一个tomcat镜像为什么只有500m,而一个tomcat安装包只有70m?
基础镜像
Dockerfile是一个文本文件,用来制作镜像。
Dockerfile常用指令:
Dockerfile 四部分说明:
-
一开始必须要指明所基于的镜像名称, 关键字是FROM, 这是必须的.
-
接下来是维护者信息关键字是MAINTAINER, 非必须, 但良好的习惯有利于后期的职责明确.
-
后面是镜像操作指令, 如RUN等, 每执行一条RUN命令,镜像添加新的一层.
-
最后是CMD指令,来指明运行容器时的操作命令.