安装Docker
本安装教程参考Docker官方文档,地址如下:
https://docs.docker.com/engine/install/centos/
首先如果系统中已经存在旧的Docker,则先卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
首先要安装一个yum工具
yum install -y yum-utils
安装成功后,执行命令,配置Docker的yum源(阿里云):
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
最后,执行命令,安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
这里以阿里云镜像加速为例。
首先访问阿里云网站:
注册一个账号。
在首页的产品中,找到阿里云的容器镜像服务:
点击后进入控制台:
首次可能需要选择立刻开通,然后进入控制台。
找到镜像工具下的镜像加速器:
页面向下滚动,即可找到配置的文档说明:
具体命令如下:
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql
-d 容器后台运行
-p 配置端口映射 宿主机:容器端口
端口映射说明:我们可以直接访问宿主机的ip,但是不能直接访问容器,因此需要宿主机和容器做映射
-e 环境配置
-v html:/usr/share/nginx/html 挂载数据卷 这里是将html数据卷挂载到宿主机的/usr/share/nginx/html目录
mysql 指定使用的镜像名
docker run 运行做了这些
docker images 查看镜像
docker rmi 删除镜像
docker pull 拉取镜像
docker push 推送镜像
docker build 打包成镜像
docker run 创建并运行容器,如果没有此镜像将会自动拉取
docker stop 后跟容器名 停止容器
docker start 后跟容器名 仅启动容器
docker ps 查看启动的容器,-a参数查看所用容器
docker rm 后跟容器名 删除容器,-f参数强制删除所有容器
docker logs 后跟容器名 打印容器日志 -f参数持续输出
docker exec 进入容器
例子:docker exec -it mysql bash
参数说明:-it 添加可输入终端 mysql 容器名 bash 以bash命令行交互
docker volume create 创建数据卷
docker volume rm 删除指定数据卷
docker volume inspect 查看数据卷
docker volume prune 清除数据卷
docker run 命令在创建容器运行容器的同时 通过-v参数完成挂载
参数:-v html:/usr/share/nginx/html 挂载数据卷 这里是将html数据卷挂载到容器的/usr/share/nginx/html
这里会将宿主机与新加卷对应的目录设置在默认的位置
docker inspect 容器名 查看容器详细信息
上述图片的Source 对应的是宿主机目录与容器内目录对应的目录,也就是html新加卷对应的宿主机目录位置,Destination对应的是html新加卷对应的容器目录位置
docker run -d
--name mysql \
-p 3306:3306\
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
这里使用的是目录挂载,优点在于容器迁移的时候可以保证必要的数据不会丢失
在docker run 容器的时候即使没有声明挂载,命令也会默认进行一个挂载,这种默认的卷名字一般比较复杂
maven项目打成jar包所需的依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.3</version>
<!--这里写上main方法所在类的路径从java包开始写起-->
<configuration>
<mainClass>com.duhong.MainApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
docker run 可以通过 -network 指定自定义网络
启动容器时出现以下错误
Error response from daemon: driver failed programming external connectivity on endpoint dockerdemo2 (2c59b8326774a5f6e809454e9ccf0186631f43b420b9c017e3c95ffb75426270): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 6006 -j DNAT --to-destination 172.18.0.3:6006 ! -i br-0330239e3bfd: iptables: No chain/target/match by that name.
(exit status 1))
systemctl restart docker #重启docker
docker start dockerdemo2