Linux Ubuntu环境下安装配置Docker 和Docker、compose、mysql、中文版portainer 这篇文章探讨了在Linux Ubuntu环境下安装和配置Docker及其相关工具的过程。首先介绍了Docker的基本概念,然后详细讲解了在Ubuntu系统上的安装步骤。随后,文章涵盖了Docker Compose的配置,使读者能够更高效地管理多个Docker容器。此外,文章还包括了在Docker环境中部署和配置MySQL数据库的方法,以满足各种应用的数据存储需求。最后,文章介绍了中文版Portainer的安装和配置,为用户提供了一个友好的图形化界面,使Docker容器的管理变得更加直观和便捷。通过这些内容,读者将能够迅速在Ubuntu系统上搭建强大的Docker环境,同时利用相关工具更方便地进行容器化应用的开发和部署。 首先环境准备: 下载Ubuntu20.04.4版本并打开vmare16虚拟机(我用的这个版本) iso镜像名称:ubuntu-20.04.4-desktop-amd64.iso 其它版本的ubuntu可以去官网自行下载: https://ubuntu.com/ 为了避免出现其它环境问题先卸载旧版本(纯净镜像可以忽略此步骤): sudo apt-get remove docker docker-engine docker.io containerd runc
rm -rf /var/lib/docker rm -rf /var/lib/containerd ![](http://img.e-com-net.com/image/info8/6843911ea03e4df1906abcd0ba4e5f16.jpg) 安装docker sudo apt-get update sudo apt install apt-transport-https ca-certificates curl software-properties-common 或者按照官方的命令: sudo apt-get install ca-certificates curl gnupg lsb-release ![](http://img.e-com-net.com/image/info8/2bd7b66f293543669174aad2e9d5c63b.jpg) 添加Docker’s official GPG key sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg ![](http://img.e-com-net.com/image/info8/bd896b568ffa4b77a63056ffffe47cd0.jpg) 设置仓库 echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ![](http://img.e-com-net.com/image/info8/3ac536e477454d6f858e0a2a6bdca4ad.jpg) 设置国内镜像仓库 vim /etc/docker/daemon.json 添加以下内容 {
"registry-mirrors": ["https://kuamavit.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"],
"max-concurrent-downloads": 10,
"storage-driver": "overlay2",
"graph": "/data/docker",
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
} 查看是否更改为国内的镜像仓库: docker info ![](http://img.e-com-net.com/image/info8/2d04ade9434c4d369fa7042ab52b0209.jpg) ![](http://img.e-com-net.com/image/info8/ea91fbc0f6624e698a1164e43280ca54.jpg) docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组, 并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令。 sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 newgrp docker #更新用户组 就没有了error报错: ![](http://img.e-com-net.com/image/info8/0d9bb8c7536d45cea9f4617e05f4f0d7.jpg) 由于容器的环境比较精简不能编辑,我们可从本机编辑文件复制到容器 docker cp /root/index.html tomcat-8080:/usr/local/tomcat/webapps/ ![](http://img.e-com-net.com/image/info8/3028ce6f1be54e019861c3dd03e49d99.jpg) 运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动 例子 docker run -d -p 6379:6379 --name redis506 --restart=always -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf redis:5.0.5 --requirepass "password" ![](http://img.e-com-net.com/image/info8/c94797d471de4959b9ff840b4367ec81.jpg) 设置随服务启动而自启动 systemctl enable docker ![](http://img.e-com-net.com/image/info8/2b53184ac58545b39c38ed0328c099d9.jpg) 安装 Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #可以自己选定版本号安装我选的是v2.12.2 ![](http://img.e-com-net.com/image/info8/f3032881bb5d4223b82327c24f3f013d.jpg) sudo ln -s ~/.docker/cli-plugins/docker-compose /usr/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose //设置权限 最底下显示镜像地址就是生效 ![](http://img.e-com-net.com/image/info8/dd39aef299034710baf477adfd114551.jpg) 查看docker compose ![](http://img.e-com-net.com/image/info8/9035d6d8710e41dab3935c11817b2a17.jpg) 运行 Docker Compose ![](http://img.e-com-net.com/image/info8/7ed31a6ec03f423f82a4c9075afc7f53.jpg) 下载tomcat的镜像 docker pull tomcat docker images #显示所有镜像 ![](http://img.e-com-net.com/image/info8/fdce36ed1a6a461fafbfa129e29b3a24.jpg) 创建tomcat容器 docker run -d --name tomcat-8080 -p 8080:8080 tomcat docker run -d --name tomcat-8081 -p 8081:8080 tomcat ![](http://img.e-com-net.com/image/info8/e4844ba3a16448f5bf731e1bbbcdeb76.jpg) 进入容器配置服务 docker exec -it tomcat-8080 bash #为了镜像的简洁性,tomcat删除了非必要的文件 进入webapps下 mkdir ROOT echo '8080!!!'>>index.html echo '8081!!!'>>index.html #由于最小化没有vi命令,使用打印命令写入文件。 ![](http://img.e-com-net.com/image/info8/3a98157712db4fe1bf084f5dc87c43c4.jpg) 防火墙放行 firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --zone=public --add-port=8081/tcp --permanent ![](http://img.e-com-net.com/image/info8/c459fc2ec4f54fa2a513f91b93a60135.jpg) 配置docker数据卷 数据卷:是一个可供一个或多个容器使用的特殊目录。 1、docker run -v 本机存放路径:容器内的存放路径 -d --name -p *:* 镜像 例子: docker run -d -p 8080:8080 --name Tomcat-8080 -v /root/docker-vloumn/qfnj:/usr/local/tomcat/webapps/qfnj tomcat ![](http://img.e-com-net.com/image/info8/869f1398d0fe4d9ea19a89421704b68c.jpg) Docker安装nginx nginx目录 /usr/sbin/nginx /usr/lib/nginx /etc/nginx nginx的配置文件 /usr/share/nginx nginx静态html5文件 nginx容器创建,并创建对应的映射关系 docker run -d -p 80:80 --name nginx-damoe -v /usr/local/nginx/html:/usr/local/nginx/html -v /user/local/nginx/conf/nginx.conf:/etc/nginx/conf.d/deafault.conf -v /usr/local/nginx/logs:/var/log/nginx nginx ![](http://img.e-com-net.com/image/info8/88ba60a70e44430e9f649b2c9f2eba36.jpg) docker中安装Mysql docker pull mysql:8.0.27 ![](http://img.e-com-net.com/image/info8/1d336e8bb7a146d8beb13d87025f24df.jpg) docker run -d --name Mysql-3306 -p 3306-3306 -e MYSQL_ROOT_PASSWORD='123456' mysql:8.0.27 ![](http://img.e-com-net.com/image/info8/77d1f4ae6916401e9ff5986efb1e2221.jpg) -p 13306:3306 将容器的 3306 端口映射到主机的 3306 端口 --name Mysql-3306 启动后容器名 -e MYSQL_ROOT_PASSWORD='123456' 初始化 root 用户的密码 docker中部署Mysql docker pull mysql:8.0.27 ![](http://img.e-com-net.com/image/info8/8dfb0d51f1a84108bf707bb00cf43323.jpg) 创建容器并运行: docker run -d --name Mysql-3306 -p 3306-3306 -e MYSQL_ROOT_PASSWORD='123456' mysql:8.0.27 ![](http://img.e-com-net.com/image/info8/eaa5d09a6a724175abd50b0b62af6cd3.jpg) -p 3306:3306 将容器的 3306 端口映射到主机的 3306 端口 --name Mysql-3306 启动后的容器名 -e MYSQL_ROOT_PASSWORD='123456' 初始化 root 用户的密码 Docker中运行mysql,避免中文输入问题: docker exec -it Mysql-3306 env LANG=C.UTF-8 bash mysql -uroot -p ![](http://img.e-com-net.com/image/info8/3a03d89e905b4e2cb2a04ac62fc5950b.jpg) 输入密码:123456进入mysql 展示数据库: show databases; ![](http://img.e-com-net.com/image/info8/90d42ac4ba7b4f8fa9497edcf64e6a8e.jpg) 使用mysql数据库: use mysql; ![](http://img.e-com-net.com/image/info8/0821f5a15cab4bdc8ce4d03cfd1c1675.jpg) 查看用户信息: SELECT `Host`,`User` FROM user; ![](http://img.e-com-net.com/image/info8/2801a213b67448eabe664b4233d3eb35.jpg) MySQL默认只允许root账户在本地登录,如果要在其他机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的账户 因为拉取的mysql镜像是比较新版本的,当使用grant权限列表on数据库to '用户名'@'访问主机" identified by '密码';时会出现.……ear 'identified by '密码" at line1"这个错误 因为新版的的mysql版本已经将创建账户和赋予权限的方式分开了。 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION ; flush privileges; ![](http://img.e-com-net.com/image/info8/e14f6833e08743598c65afee61220786.jpg) 创建myx数据库并使用 ![](http://img.e-com-net.com/image/info8/aa9905f1a9de4a4a9d8f7945abca9120.jpg) #下面是我自己的一些设计表和建表,可忽略。 构建表结构并插入数据: teacher表结构
字段名 |
字段描述 |
数据类型 |
主键 |
外键 |
非空 |
唯一 |
自增 |
id |
编号 |
INT(4) |
是 |
否 |
是 |
是 |
是 |
num |
教工号 |
INT(10) |
否 |
否 |
是 |
是 |
否 |
name |
姓名 |
VARCHAR(20) |
否 |
否 |
是 |
否 |
否 |
sex |
性别 |
VARCHAR(4) |
否 |
否 |
是 |
否 |
否 |
birthday |
出生日期 |
DATETIME |
否 |
否 |
否 |
否 |
否 |
address |
家庭住址 |
VARCHAR(50) |
否 |
否 |
否 |
否 |
否 |
(1)teacher表的创建: create table teacher(
id int(4) not null unique auto_increment,
num int(10) not null unique,
name varchar(20) not null,
sex varchar(4) not null,
birthday datetime,
address varchar(50),
primary key(id)
)engine = InnoDB default charset = utf8 collate = utf8_bin; ![](http://img.e-com-net.com/image/info8/12f200ccc64b4bf4b7fbaa116ac30688.jpg) 然后向teacher表中插入记录。 insert into teacher values(1, 1001, '张三', '男', '1984-11-08', '北京市昌平区'),(2, 1002, '李四', '女', '1970-01-21', '北京市海淀区'),(3, 1003, '王五', '男', '1976-10-30', '北京市昌平区'),(4, 1004, '赵六', '男', '1980-06-05', '北京市顺义区'); ![](http://img.e-com-net.com/image/info8/c0f94a7f46b74492af15aa4c793e2f42.jpg) 查询teacher表数据: ![](http://img.e-com-net.com/image/info8/993601d1a2aa41b6a03455c3087bbe49.jpg) 防火墙放行3306 firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload ![](http://img.e-com-net.com/image/info8/72d5a975e9404cf4adcaabd985448582.jpg) dockerfile配置demo1 1、创建存放Dockerfile文件的文件夹 mkdir -p /usr/local/docker/demo1/ 2、编写Dockerfile文件 (注:Dockerfile文件是严格区分大小写的) FROM tomcat #借助tomcat的镜像 RUN mkdir -p /usr/local/tomcat/webapps/ROOT/ #创建ROOT目录 RUN echo "Good morning, and in case I don't see you, Good afternoon, Good evening, And good night.">/usr/local/tomcat/webapps/ROOT/index.html #使用 echo 写入创建内容 WORKDIR /usr/local/tomcat #跳转到/usr/local/tomcat目录 3、构建Dockerfile镜像 -t 指定构建镜像名称 docker build -t demo1 .或绝对路径 4、创建容器,测试镜像 docker run -d --name demo1-8080 -p 8080:8080 demo1 ![](http://img.e-com-net.com/image/info8/3419fb496c304cc880fa33229814f552.jpg) ![](http://img.e-com-net.com/image/info8/b7ddaf4faec9479aae9fc8d640f06db7.jpg) ![](http://img.e-com-net.com/image/info8/c697b7041c434ed8a05a313e807dfd9b.jpg) Dockerfile案例七、配置demo1:2.0 1、创建demo2文件夹 mkdir -p /usr/local/docker/demo1:2.0/ 2、编写demo2的Dockerfile文件 FROM tomcat WORKDIR /usr/local/tomcat/webapps/ROOT/ RUN rm -rf * RUN echo " Hello world">/usr/local/tomcat/webapps/ROOT/index.html 3、创建镜像 docker build -t demo2 /usr/local/docker/demo1:2.0/ 4、创建容器,测试镜像 docker run -d --name demo1-8080 -p 8080:8080 demo1:2.0
- 测试
![](http://img.e-com-net.com/image/info8/7f52605a98c14ccc9c2243c122db63f6.jpg) ![](http://img.e-com-net.com/image/info8/1bec8311489a4581824f65b4731c1964.jpg) Dockerfile配置demo2 (学习COPY命令) 1、创建demo2文件夹 mkdir -p /usr/local/docker/demo2/ 2、编写Dockerfile文件 FROM tomcat WORKDIR /usr/local/tomcat/webapps RUN mkdir ROOT RUN rm -rf * COPY 1.jpg /usr/local/tomcat/webapps/ROOT/ 3、创建镜像 docker build -t demo2 . 4、创建容器,测试镜像 ![](http://img.e-com-net.com/image/info8/4a845afee4c949cf844e541d8fea4f30.jpg) ![](http://img.e-com-net.com/image/info8/416b53a76ba244488c78f9935e96de0e.jpg) ![](http://img.e-com-net.com/image/info8/e9d305eea04b440d9553da7c73ba7070.jpg) Dockerfile案例九 1、创建demo3文件夹 mkdir -p /usr/local/docker/demo3/ 2、编写demo3的Dockerfile文件 FROM tomcat RUN mkdir -p /usr/local/tomcat/webapps/ROOT WORKDIR /usr/local/tomcat/webapps/ROOT RUN rm -rf * COPY qfnj.zip /usr/local/tomcat/webapps/ROOT/ RUN unzip qfnj.zip RUN rm -rf qfnj.zip WORKDIR /usr/local/tomcat 3、创建镜像 docker build -t demo3 . 4、创建容器,测试镜像 ![](http://img.e-com-net.com/image/info8/c2dacef3d04240a7968f1563ad8e7555.jpg) ![](http://img.e-com-net.com/image/info8/fa9ec7d8b4f94346ac8b84d64f314ea2.jpg) Dockerfile案例十、配置图形化 1、下载docker的中文图形化镜像 sudo su cp Portainer-CN.zip /root Portainer-CN中文界面包上传到root目录下下 sudo mkdir -p /root/portainer/{data,public} 在命令行root目录下输入下面代码 apt install unzip unzip Portainer-CN.zip -d /root/portainer/public docker run -d \
--net bridge \
-p 9000:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /root/portainer/data:/data \
-v /root/portainer/public:/public \
--name myportainer \
portainer/portainer ip;9000 设置管理员密码,密码长度不少于八个字符设置好后网页右上角注销重新登录选择本地docker ![](http://img.e-com-net.com/image/info8/ddeb6f0ecf594d69ac4bfc016c9cee7d.jpg) OK,到此一些docker和docker-compose的部署和一些简单案例结束了,后面我还会继续更新相关大数据方面的内容。 |