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环境测试部署一次,博客正常显示。

posted @ 2023-07-02 16:59  wang_wei123  阅读(205)  评论(0编辑  收藏  举报