docker基础展示-1
一天掌握Docker学习
官网:https://docs.docker.com/network/
1.Docker介绍与体系结构
Docker是一个开源的应用容器引擎,使用go语言开发,基于Linux内核cgroup,namespace,union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器。
Docker早期版本实现是基于LXC,并进一步对其封装,包括文件系统、网络互联、镜像管理等方面,极大简化了容器管理,从0.7版本以后开始去除LXC,转为自行研发的libcontainer,从1,1版本开始,进一步演进为使用runC和containerd。
Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布任意Linux发型版本docker引擎上,使用沙箱机制运行程序,程序之间相互隔离。
入门命令操作
$ docker run -d busybox ping baidu.com
$ docker ps –l
$ ps -ef |grep 794e42b
$ ps -axjf 1557
$ docker ps -q #查看容器id
$ docker ps -q -a
树形结构展示
以上演示docker运行体系。
2.Docker内部组件、虚拟机与容器区别
内部组件:
资源隔离:安全级别高,黑客入侵只是一个伪终端和容器文件系统(看不到宿主机上面的信息)。
虚拟机和容器区别
3.Docker应用场景
参考:https://blog.51cto.com/lizhenliang/1978081
4.Linux安装Docker
Docker-ce社区版本,Docker-ee企业版本
$ curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ yum clean all && yum makecache
## 查看所有可用版本:yum list docker-ce --showduplicates|sort -r
## 安装最新版本:yum install -y docker-ce
$ systemctl enable docker && systemctl restart docker
$ docker info查看安装版本信息。
5.镜像管理-镜像与容器联系和存储驱动
镜像是什么?
简单说,Docker镜像是一个不包含linux内核而又精简的linux系统。
镜像从哪里来?
docker hub是由docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像下载镜像。
https://hub.docker.com/explore, 默认是国外的源,下载很快,建议配置国内镜像仓库:
$ mkdir -p /etc/docker
$ tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
镜像与容器联系
存储驱动
镜像管理命令
官方镜像源地址:https://hub.docker.com/
镜像管理参考:https://blog.csdn.net/omaidb/article/details/121072783
镜像命令
命令 | 描述 | 备注 |
ls | 列出镜像 | |
build | 构建镜像来自Docker | |
history | 查看镜像历时 | |
inspect | 显示一个或多个镜像详细信息 | |
pull | 从镜像仓库拉取镜像 | |
push | 推送一个镜像到镜像仓库 | |
rm | 移除一个或多个镜像 | |
prune | 移除未使用的镜像,没有被标记或被任何容器引用的 | |
tag | 创建一个引用源镜像标记目标镜像 | |
export | 导出容器文件系统到tar归档文件 | |
import | 导入容器文件系统tar归档文件创建镜像 | |
save | 保存一个或多个镜像到一个tar归档文件 | |
load | 加载镜像来自tar归档或标准输入 |
6.镜像管理-镜像管理常用命令
[root@master ~]# docker images
[root@master ~]# docker image ls
[root@master ~]# docker image history tomcat
[root@master ~]# docker image inspect httpd
[root@master ~]# docker image pull nginx:1.11
[root@master ~]# docker image push ….
[root@master ~]# docker tag nginx nginx_new 标记镜像
[root@master ~]# docker image save nginx > nginx1.11.tar 导出镜像
[root@master ~]# docker load < nginx1.11.tar 导入镜像
[root@master ~]# docker export 794e4 > busybox.tar
[root@master ~]# du -sh busybox.tar
1.4M busybox.tar
[root@master ~]# docker image import busybox.tar busybox:selfone
7.容器管理-创建容器常见选项
[root@master ~]# docker container run -itd --name bs busybox
3a4192563d3f4a166b03e62d786e6102311746be202c422fb406dca9457eb71e
[root@master ~]# docker container attach bs
[root@master ~]# docker logs 3a41
[root@master ~]# docker inspect 3a41
[root@master ~]# ll /var/lib/docker/containers/3a4192563d3f4a166b03e62d786e6102
8.容器管理-创建容器常见选项
容器镜像比较精简,自己构建镜像,可以安装自己需要的基础命令。
[root@master ~]# docker run -itd -p 30001:80 --name nginx1 nginx /bin/bash
8c159d8f768156795fee073e08274f0accbe3ef62b07004ee73cdaa2cc2d2c25
[root@master ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c159d8f7681 nginx "/bin/bash" 3 seconds ago Up 3 seconds 0.0.0.0:30001->80/tcp nginx1
[root@master ~]# docker exec -it nginx1 sh
# ls
# cat /etc/issue
拷贝文件到容器:docker container cp anaconda-ks.cfg nginx1:/root
也拷贝容器文件到宿主机
docker stats nginx1 查看容器资源
9.管理应用程序数据-数据卷
参考:https://docs.docker.com/storage/volumes/
[root@master ~]# docker volume --help
[root@master ~]# docker volume create nginx-vol
nginx-vol
[root@master ~]# docker volume ls
local nginx-vol
[root@master ~]# docker volume inspect nginx-vol
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
"Name": "nginx-vol",
"Options": {},
"Scope": "local"
}
]
[root@master ~]# docker run -d -it --name=nginxtest -v nginx-vol:/usr/share/nginx/html nginx
0a212577803da52d76b46ca810bc983959366e16d1f3b5017e394dd4863e1407
[root@master ~]# ll /var/lib/docker/volumes/nginx-vol/_data/
-rw-r--r-- 1 root root 494 4月 16 21:08 50x.html
-rw-r--r-- 1 root root 612 4月 16 21:08 index.html
[root@master ~]# echo "200">/var/lib/docker/volumes/nginx-vol/_data/200.txt
[root@master ~]# docker run -it --name=nginxtest3 -v nginx-vol:/usr/share/nginx/html nginx /bin/bash
root@40edeaaf6f04:/# cat /usr/share/nginx/html/200.txt
200
root@40edeaaf6f04:/#
适用范围:
Tomcat服务部署,可以将.war包部署在项目上。
10.管理应用程序数据-搭建LNMP网站平台实战
创建自定义网络
创建mysql数据库
创建所需数据库
创建php环境
以WordPress博客测试
[root@master ~]# wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz
参考官方源:https://hub.docker.com/_/mysql
[root@master ~]#
[root@master ~]# docker network create lnmp
80625a0c2b0cf6971eec7165251eadb81b20fcd8064f86293bda5e80ea3b9b40
[root@master ~]# docker run -itd --name lnmp_mysql -e MYSQL_ROOT_PASSWORD=123456 -p 33060:3306 -v mysql-vol:/var/lib/mysql --net=lnmp mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
5b5ee44ee075637f2b3e00a4fac20802dc821b64e897e4355642ce79df1b7c2e
[root@master ~]# docker volume ls
DRIVER VOLUME NAME
local mysql-vol
local nginx-vol
[root@master ~]# ll /var/lib/docker/volumes/mysql-vol/
[root@master ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
49bdf6b18748 mysql "docker-entrypoint..." 8 minutes ago Up 8 minutes 3306/tcp, 33060/tcp lnmp_mysql
[root@master ~]#
[root@master ~]# docker logs lnmp_mysql
[root@master ~]# docker exec lnmp_mysql /bin/sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "create database wp"'
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@master ~]# docker exec lnmp_mysql /bin/sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "show databases;"'
Database
information_schema
mysql
performance_schema
sys
wp
宿主机连接有问题,需要处理,跟MySQL8.0相关。
参考:https://www.cnblogs.com/chuancheng/p/8964385.html
[root@master ~]# docker exec -it lnmp_mysql /bin/sh
# mysql -uroot -p123456
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
mysql> flush privileges;
mysql> exit
[root@master ~]# mysql -h192.168.19.129 -P 33060 -uroot -proot
数据库wp创建完成。
部署php服务
[root@master ~]# mkdir -p /app/wwwroot
[root@master ~]# tar -xf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot/
[root@master ~]# ls /app/wwwroot/
wordpress
[root@master ~]# docker run -itd --name lnmp_web --net lnmp -p 88:80 -v /app/wwwroot:/var/www/html richarvey/nginx-php-fpm
配置WordPress安装过程。
此次下载镜像需要FQ,请配置好代理地址
[root@master ~]# export http_proxy=user:password@x.00.xx.xx:3128
[root@master ~]#
[root@master ~]# docker pull richarvey/nginx-php-fpm
[root@master ~]# cat /etc/docker/daemon.json 配置国内镜像源,重启docker,下载速度快。
{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"insecure-registries":["192.168.19.129:5000"]
}
[root@master ~]# docker pull richarvey/nginx-php-fpm
[root@master ~]# docker images
docker.io/richarvey/nginx-php-fpm latest 49774adafa34 2 weeks ago 334 MB
[root@master ~]# docker run -itd --name lnmp_web --net lnmp -p 88:80 -v /app/wwwroot:/var/www/html richarvey/nginx-php-fpm
b02915345b95ec279d316ec03d65383bcc6116c33632884c32c9408ebe96347f
[root@master ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b02915345b95 richarvey/nginx-php-fpm "docker-php-entryp..." 7 seconds ago Up 5 seconds 443/tcp, 9000/tcp, 0.0.0.0:88->80/tcp lnmp_web
[root@master ~]#
界面访问博客地址。浏览器访问
http://192.168.19.129:88/wordpress
安装过程,
配置登录账户密码:admin 123456
[root@master ~]# mysql -h192.168.19.129 -P 33060 -uroot –proot
MySQL [(none)]> use wp;
MySQL [wp]> show tables;
+-----------------------+
| Tables_in_wp |
+-----------------------+
| wp_commentmeta |
| wp_comments |
11.Dockerfile-常用指令
参考:https://www.cnblogs.com/ywrj/p/9594869.html
Dockerfile指令
创建dockerfile目录结构
第一步,配置php服务。
[root@master ~]# ls dockfiles/php/ 不需要修改php.ini文件
Dockerfile php-5.6.9 php-5.6.9.tar.gz php.ini
[root@master php]# docker build -t php:v1 -f Dockerfile . 创建PHP镜像
第二步,配置Nginx服务。
准备Nginx配置文件和安装包
准备dockfile文件
[root@master dockfiles]# docker build -t nginx:v1 -f Dockerfile . 创建PHP镜像
[root@master php]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
php v1 01bd44eb95af 19 minutes ago 1.03 GB
nginx v1 fd1402d16f82 3 hours ago 423 MB
[root@master php]# docker network create lnmpt
07ccf6bef4b539084b1c222601cabbc40d8ab3b213a71cd3ead44d1ebe795212
[root@master php]# docker network ls
NETWORK ID NAME DRIVER SCOPE
80625a0c2b0c lnmp bridge local
07ccf6bef4b5 lnmpt bridge local
[root@master php]# mkdir -p /app/wwwroot/
[root@master php]# docker run -itd --name lnmp_php2 --net lnmpt -v /app/wwwroot:/usr/local/nginx/html php:v1
850b94ce699fa96db39bd14f7226ee0ecdba29e5efe20546cac788d710455ee7
[root@master php]# docker run -itd --name lnmp_nginx2 --net lnmpt -p 888:80 -v /app/wwwroot:/usr/local/nginx/html nginx:v1
36ed801e35e0fa7a433fb0caef27860b288372056a1f0f327cf7a1cf8f99f12a
继续测试PHP服务
[root@master ~]# echo "<?php phpinfo();?>" > /app/wwwroot/index.php
自此完成了PHP、Nginx部署,还需要部署数据库服务。
部署MySQL服务
[root@master ~]# docker run -itd --name lnmp_mysql2 -e MYSQL_ROOT_PASSWORD=123456 -p 33061:3306 -v mysql-vol:/var/lib/mysql --net=lnmpt mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
5be783592305053198abced082b09b6a343a35e7a485c5386494a3bd25919a50
[root@master ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5be783592305 mysql "docker-entrypoint..." 6 seconds ago Up 5 seconds 33060/tcp, 0.0.0.0:33061->3306/tcp lnmp_mysql2
[root@master ~]# mysql -h192.168.19.129 -P 33061 -uroot -proot -e "show databases"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wp |
+--------------------+
如上,昨天创建的MySQL数据库数据还是存在的。
[root@master ~]# tar -xf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot/
[root@master ~]# ll /app/wwwroot/
总用量 12
-rw-r--r-- 1 100 101 6 4月 23 11:09 index.jsp
-rw-r--r-- 1 root root 19 4月 23 14:28 index.php
drwxr-xr-x 5 nobody 65534 4096 4月 23 2017 wordpress
安装部署WordPress服务,同上。
将lnmp环境测试部署一次,博客正常显示。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
2019-07-02 Python3.6+Django2.0.3基础环境调试