docker教程
docker是什么
Docker 是一个开源的应用容器引擎,基于 [Go 语言] 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 包括三个基本概念:
-
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
-
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
-
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Ubuntu 系统
安装ftp服务
1.安装 vsftpd
apt-get install vsftpd
#启动
service vsftpd start
#停止
service vsftpd stop
#重启
service vsftpd restart
#状态
service vsftpd status
2.安装vim 出现[Y/n] 输入y
apt-get install vim
3.修改配置文件,进入配置文件
vim /etc/vsftpd.conf
listen=NO # 服务器监听
local_enable=YES # 是否允许本地用户访问
write_enable=YES # 是否允许上传文件,不开启会报 550 permission denied
anonymous_enable=NO # 匿名访问允许,默认不要开启,
anon_upload_enable=YES # 匿名上传允许,默认是NO
#anon_mkdir_write_enable=YES # 匿名创建文件夹允许
4.修改ftpusers文件、注释掉root 允许root用户登录ftp
vim /etc/ftpusers
5.xftp连接
安装JDK
1.下载好相应的jdk使用xftp上传
2.进入该目录解压该文件
cd /usr/local/java
ls
tar -zxvf jdk-8u144-linux-x64.tar.gz
#重命名
mv jdk1.8.0_144 jdk1.8
3.修改环境变量
vim ~/.bashrc
在末尾追加下面内容,保存退出
#set oracle jdk environment
export JAVA_HOME=/usr/local/java/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
5.使环境变量生效
source ~/.bashrc
6.验证是否安装成功
java -version
Ubuntu Docker
1.使用 Ubuntu Docker 仓库进行安装
设置仓库
更新 apt 包索引
sudo apt-get update
#安装 apt 依赖包,用于通过HTTPS来获取仓库:
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
使用以下指令设置稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
2.安装 Docker Engine
1.安装最新版本的 Docker Engine:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
2.或者安装指定版本的 Docker Engine:
apt-cache madison docker-ce
sudo apt-get install docker-ce=5:20.10.16~3-0~ubuntu-groovy docker-ce-cli=5:20.10.16~3-0~ubuntu-groovy containerd.io
3.出现E: Version ‘5:20.10.43-0ubuntu-groovy’ for ‘docker-ce’ was not found
解决
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
4.通过运行hello-world镜像来验证Docker Engine是否正确安装:
sudo docker run hello-world
Docker服务的启动与自启动
开启开机自启动:
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
#关闭开机自启动:
sudo systemctl disable docker.service
sudo systemctl disable containerd.service
# 启动 停止 关闭
sudo service docker start
sudo service docker stop
sudo service docker restart
卸载Docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io
#删除相关文件
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/docker
Docker安装Nginx
1.查看本地镜像
docker images
2.获取最新的Nginx镜像
docker pull nginx:latest
3.运行容器
docker run --name nginx-test -p 80:80 -d nginx
#参数说明:
#--name nginx-test**:容器名称。
#-p 80:80**: 端口进行映射,将本地 80 端口映射到容器内部的 80 端口。
#-d nginx**: 设置容器在在后台一直运行。
4.访问ip:80
Docker安装MYSQL
1.查看版本
docker search mysql
2.拉取 MySQL 镜像
docker pull mysql:latest
3.查看本地镜像
docker images
4.运行容器
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
#参数说明:
#-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
#MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
5.通过 docker ps 命令查看是否安装成功:
本机可以通过 root 和密码 123456 访问 MySQL 服务
docker exec -it mysql-test bash
#mysql-test改成自己的mysql名称或id
mysql -uroot -p123456
6.配置可远程连接数据库
use mysql;
select Host,User from user;
#修改host为通配符%
update user set host = '%' where User = 'root';
select user,plugin from user where user='root';
# 注意:如果是远程连接,请将'localhost'换成'%'
alter user 'root'@'%' identified with mysql_native_password by '你的数据库密码';
或
alter user 'root'@''localhost' identified with mysql_native_password by '你的数据库密码';
#刷新权限
flush privileges;
7.navicat连接
Docker安装Tomcat
1.查看版本
docker search tomcat
2.拉取 Tomcat 镜像
# 安装最新版
docker pull tomcat
# version为指定的版本
docker pull tomcat:8.5.56
3.查看本地镜像
docker images
4.运行Tomcat容器
docker run --name tomcat_test -p 8080:8080 -d tomcat:8.5.56
#--name tomcat_test: tocmat容器名称 自定义
#-p:8080:8080: 端口映射 8080任意,8080为默认端口
#-d:后台运行
5.通过 docker ps 命令查看是否安装成功:
6.访问ip:8080
解决方法如下:
#进入容器
docker exec -it tomcat_test bash
#进入tomcat目录
cd /usr/local/tomcat/
#删除webapps
rm webapps -rf
#将webapps.dist复制为webapps
cp webapps.dist webapps -r
#退出
exit
#动态查看日志
docker logs -f tomcat_test
再次访问ip:8080 成功
Docker 发布web项目
1.创建挂载目录
mkdir /usr/local/tomcat -p
2.拷贝docker资源
# 从容器中复制webapps.dist(低版本叫webapps)
# /usr/local/tomcat/webapps.dist 为docker中容器的目录
# /usr/local/tomcat/webapps 为宿主机的目录
docker cp tomcat_test:/usr/local/tomcat/webapps.dist/ /usr/local/tomcat/webapps
#查看目录
cd /usr/local/tomcat/webapps
ll
3.挂载启动
# 启动挂载容器前,需要先关闭并且删除原有的容器
docker stop tomcat_test
docker rm tomcat_test
4.启动挂载容器
# -v表示挂载,前面的目录为宿主机目录结构,后面的目录为容器中的目录结构
docker run --name tomcat_test \
-p 8080:8080 \
-v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps \
-d tomcat:8.5.56
#修改时区 默认情况下,tomcat中的时间比“北京”时间少8小时,需要进行手动时间校正
#进入容器
docker exec -it tomcat_test bash
#执行命令
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
5.项目打成war包上传
6.访问ip:8080/bysjxksys/ 成功
Docker 安装 Redis
1.查看版本
docker search redis
2.拉取 redis 镜像
# 安装最新版
docker pull redis:latest
3.查看本地镜像
docker images
4.运行redis容器
docker run -itd --name redis-test -p 6379:6379 redis
#-p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。
5.通过 docker ps 命令查看是否安装成功:
6.通过 redis-cli 连接测试使用 redis 服务
docker exec -it redis-test /bin/bash
Docker 删除镜像
注意:先停止容器,再删除容器,最后删除镜像.
docker images ##查看镜像
docker ps -a ##查看容器
docker stop ‘CONTAINER_ID’ ##停止容器
docker rm 'CONTAINER ID' ##删除容器
docker rmi 'IMAGE ID' ##删除镜像
Docker常用命名
#docker 基础命令
systemctl start | stop | restart docker
#容器操作
docker start | stop | restart
5.通过 docker ps 命令查看是否安装成功:
[外链图片转存中…(img-3PEvjETF-1658065830774)]
6.通过 redis-cli 连接测试使用 redis 服务
docker exec -it redis-test /bin/bash
[外链图片转存中…(img-znUyNdo3-1658065830774)]
Docker 删除镜像
注意:先停止容器,再删除容器,最后删除镜像.
docker images ##查看镜像
docker ps -a ##查看容器
docker stop ‘CONTAINER_ID’ ##停止容器
docker rm 'CONTAINER ID' ##删除容器
docker rmi 'IMAGE ID' ##删除镜像
Docker常用命名
#docker 基础命令
systemctl start | stop | restart docker
#容器操作
docker start | stop | restart