docker命令
服务相关命令
- 启动docker:systemctl start docker
- 停止docker:systemctl stop docker
- 查看docker启动状态:systemctl status docker
- 重启docker:systemctl restart docker
- 设置开机自动启动docker:systemctl enable docker
镜像相关命令
- 查看镜像:docker images
- 搜索镜像:docker search 镜像名称
- 下载镜像(拉取):docker pull 镜像名称:版本号(不写版本号默认下载最新版)
- 删除镜像:docker rmi 镜像ID(名字、版本)
- 获取所有镜像ID:docker images -q
- 删除所有镜像:docker rmi
docker images -q
容器相关命令
-i(容器保持运行,通常与-t同时使用)
-t(给容器分配伪输入终端)
-d(以后台模式运行容器,创建一个容器后台运行,需要使用docker exec进入容器,退出后容器不会关闭)
-it(创建的容器一般称为交互式容器,-id创建的容器一般称为守护式(后台)容器)
–name=为创建的容器命名
/bin/bash (进入容器)
-
创建并启动容器后立即进入容器:docker run -it --name= c1 容器 /bin/bash
-
创建并启动容器不会进入容器:docker run -id --name=c2 容器
-
退出容器:exit
-
查看正在运行的容器:docker ps
-
查看历史容器:docker ps -a
-
进入容器:docker exec -it 容器名 /bin/bash
-
停止容器:docker stop 容器名
-
启动容器:docker start 容器名
-
删除容器:docker rm 容器名
-
删除所有容器:docker rm ‘docker ps -aq’
-
查看容器信息:docker inspect 容器名称
数据卷
什么是数据卷?
- 数据卷是宿主机中的一个目录或文件
- 当容器目录和数据卷目录绑定后,对方的修改会立即同步
- 一个数据卷可以绑定多个容器
数据卷的作用
- 容器数据持久化
- 外部机器和容器间通信
- 容器之间数据交换
思考
- Docker容器删除后,在容器中的数据还在吗?(容器中的数据不在,但是数据卷保存有容器中的数据)
- Docker容器和外部机器可以直接交换文件吗?(不能直接和容器交换文件,但是外部机器可以把更改数据卷,间接的交换文件)
- 容器之间想要交换数据如何交换?
- 一个数据卷可以绑定多个容器,更改一个容器等于更改了数据卷和其它容器,但是容器过多会比较麻烦
- 创建一个A容器来挂载数据卷,其它容器挂载A容器
配置数据卷
-
创建启动容器时,使用-v参数设置数据卷
docker run … -v 宿主机目录(文件):容器内目录(文件)
-
注意事项:
- 目录必须是绝对路径
- 如果目录不存在,会自动创建
- 可以挂载多个数据卷
创建c3容器来挂载数据卷,其它数据卷挂载A容器
- docker run -it --name=c3 -v /volume 容器 /bin/bash
创建启动c1,c2容器,使用 --volumes-from 参数挂载c3容器
- docker run -it --name=c1 --volumes-from c3 容器 /bin/bash
- docker run -it --name=c2 --volumes-from c3 容器 /bin/bash
应用部署
部署mysql
-
搜索mysql镜像
docker search mysql
-
拉取镜像
docker pull mysql:5.6
-
创建容器
docker run -id --name=c1 mysql /bin/bash
-
创建文件夹
mkdir mysql
cd mysql
-
配置容器
docker run -id
-p 3307: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.6
参数说明:
- -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
- -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 用户的密码。
-
进入容器,操作mysql
docker exec –it c_mysql /bin/bash
部署Tomcat
-
搜索Tomcat镜像
docker search tomcat
-
拉取Tomcat镜像
docker pull tomcat
-
创建容器,设置端口映射、目录映射
docker run -id --name=c_tomcat
-p 8080:8080
-v $PWD:/usr/local/tomcat/webapps
tomcat -
部署项目
mkdir test
cd test
vim index.html
<h1> hello tomcat docker</h1>
-
测试访问
192.168.23.129:8080/test/index.html
部署nginx
-
搜索nginx镜像
docker search 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。日志目录
部署redis
-
搜索redis镜像
docker search redis
-
拉取镜像
docker pull redis:5.0
-
创建容器
-
docker run -id --name=c_redis -p 6379:6379 redis:5.0
-
测试访问
redis-cli.exe -h 192.168.23.129 -p 6379
dockerfile
-
容器转为镜像(目录挂载的文件无法转到镜像里)
docker commit 容器ID 镜像名称:版本号
-
镜像转为压缩文件
docker save -o 压缩文件名称 镜像名称:版本号
-
压缩文件转为镜像
docker load -i 压缩文件名称