docker部署lnmp

dockr容器lnmp

nginx

[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

[root@829947547f38 /]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make wget
[root@829947547f38 /]# yum -y group mark install "Development Tools"
Last metadata expiration check: 0:02:03 ago on Thu 02 Dec 2021 08:29:33 AM UTC.
Dependencies resolved.
==================================================================================
 Package            Architecture      Version            Repository          Size
==================================================================================
Installing Groups:
 Development Tools                                                               

Transaction Summary
==================================================================================

Complete!

[root@829947547f38 /]# useradd -r -M -s /sbin/nologin nginx

[root@829947547f38 ~]# mkdir -p /var/log/nginx

[root@829947547f38 local]# wget http://nginx.org/download/nginx-1.20.1.tar.gz
--2021-12-02 08:33:59--  http://nginx.org/download/nginx-1.20.1.tar.gz
Resolving nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:edb:5702::6, ...
Connecting to nginx.org (nginx.org)|3.125.197.172|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1061461 (1.0M) [application/octet-stream]
Saving to: ‘nginx-1.20.1.tar.gz’

nginx-1.20.1.tar.gz  100%[====================>]   1.01M   224KB/s    in 4.6s    

2021-12-02 08:34:04 (224 KB/s) - ‘nginx-1.20.1.tar.gz’ saved [1061461/1061461]
[root@829947547f38 local]# ls
bin  games    lib    libexec              sbin   src
etc  include  lib64  nginx-1.20.1.tar.gz  share
[root@829947547f38 local]# tar xf nginx-1.20.1.tar.gz  
[root@829947547f38 local]# ls
bin  games    lib    libexec       nginx-1.20.1.tar.gz  share
etc  include  lib64  nginx-1.20.1  sbin                 src

[root@829947547f38 local]# cd nginx-1.20.1
[root@829947547f38 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-debug --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log
checking for OS
 + Linux 4.18.0-257.el8.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 8.5.0 20210514 (Red Hat 8.5.0-4) (GCC) 
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
[root@829947547f38 nginx-1.20.1]# make && make install

[root@829947547f38 nginx-1.20.1]# echo "export PATH=/usr/local/nginx/sbin:$PATH" > /etc/profile.d/nginx.sh

[root@829947547f38 local]# /usr/local/nginx/sbin/nginx 
[root@829947547f38 local]# ss -antl
State    Recv-Q   Send-Q     Local Address:Port     Peer Address:Port   Process   
LISTEN   0        128              0.0.0.0:80            0.0.0.0:* 

在创建镜像时,不能关闭容器,让它处于运行状态,所以要另起一个终端,然后执行

[root@localhost ~]# docker commit -p c1
sha256:4b2af8fdacc7b0046922b715eb4a5b3b4098e8bcf77046c78c59cb2e17249d99
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
           4b2af8fdacc7   28 seconds ago   550MB
busybox      latest    d23834f29b38   2 days ago       1.24MB
httpd        latest    ad17c88403e2   13 days ago      143MB
centos       latest    5d0da3dc9764   2 months ago     231MB
[root@localhost ~]# docker tag 4b2af8fdacc7 best2001/c1:v0.1
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
best2001/c1   v0.1      4b2af8fdacc7   2 minutes ago   550MB
busybox       latest    d23834f29b38   2 days ago      1.24MB
httpd         latest    ad17c88403e2   13 days ago     143MB
centos        latest    5d0da3dc9764   2 months ago    231MB

使用新生成的镜像创建容器

[root@localhost ~]# docker run --name t1 -it best2001/c1:v0.1
[root@49676d942358 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@49676d942358 /]# /usr/local/nginx/sbin/nginx 
[root@49676d942358 /]# ss -antl
State    Recv-Q   Send-Q     Local Address:Port     Peer Address:Port   Process   
LISTEN   0        128              0.0.0.0:80            0.0.0.0:*  

由此可见,新生成的镜像中是包含了新增的内容的,但是此时有一个问题,那就是容器默认要启动的进程是什么?在这里,默认情况下是启动的sh进程,但我们是要启动一个http站点,所以我们要在创建镜像时将容器默认启动的进程设为httpd,这样一来我们就可以通过新生成的镜像来快速构建一个简单的http站点了。

使用命令查看b1容器启动的默认进程是什么docker inspect

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE              COMMAND       CREATED         STATUS         PORTS     NAMES
49676d942358   best2001/c1:v0.1   "/bin/bash"   7 minutes ago   Up 7 minutes             t1
[root@localhost ~]# docker inspect 49676d942358
·····省略部分·····
                    "EndpointID": "3add13e115a71559c4392b6aa02d284ec27dce733909d1d3dd63d02b053cea24",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }
]

使用镜像创建容器

[root@localhost ~]# docker run --name n3 -p 80:80 -dt best2001/c1:v0.1 
2651ba6d2d5fd1e3eba909440e792142dbd0ae7d4ccf8e45d264ce82109f5e70

[root@localhost ~]# docker container ls
CONTAINER ID   IMAGE              COMMAND       CREATED              STATUS              PORTS     NAMES
2651ba6d2d5f   best2001/c1:v0.1   "/bin/bash"   About a minute ago   Up About a minute             n3

访问测试nginx

[root@localhost ~]# docker container ls
CONTAINER ID   IMAGE              COMMAND       CREATED         STATUS         PORTS     NAMES
2651ba6d2d5f   best2001/c1:v0.1   "/bin/bash"   3 minutes ago   Up 3 minutes             n3
[root@localhost ~]# curl 172.17.0.2



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

mysql
做mysql镜像并使用容器模式的网络

[root@localhost ~]# docker run -it --name mysql01 --network container:2651ba6d2d5f centos:latest /bin/bash

//重新打开一个终端查看
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE              COMMAND              CREATED          STATUS          PORTS     NAMES
2102e9a88ce8   centos:latest      "/bin/bash"          34 seconds ago   Up 33 seconds             mysql01  # mysql容器正在运行
2651ba6d2d5f   yunjisuanlp/nginx:v1   "/usr/local/nginx/sb…"   13 minutes ago   Up 13 minutes             confident_wing

上传MySQL包到本地上传到centos容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND      CREATED         STATUS         PORTS   NAMES
2102e9a88ce8   centos:latest  "/bin/bash"  34 seconds ago  Up 33 seconds          mysql01  # mysql容器正运行
2651ba6d2d5f   yunjisuanlp/nginx:v1   "/usr/local/nginx/sb…"   13 minutes ago   Up 13 minutes             confident_wing

[root@localhost ~]# cd /usr/src/
[root@localhost src]# ls
debug  kernels  mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz

[root@localhost src]# docker cp mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz 2102e9a88ce8:/usr/src # cp到mysql01容器ID下的/usr/src

MySQL容器下查看

[root@3367881fd446 ~]# cd /usr/src
[root@3367881fd446 src]# ls
debug  kernels  mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz

# 下载
yum clean all # 清理缓存
yum makecache # 生成新缓存
yum -y install which numactl-libs ncurses-compat-libs # 安装

# 创建用户
[root@3367881fd446 src]# useradd -r -M -s /sbin/nologin mysql
[root@3367881fd446 src]# id mysql
uid=998(mysql) gid=996(mysql) groups=996(mysql)

# 解压MySQL包
[root@3367881fd446 src]# tar xf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@3367881fd446 src]# cd /usr/local/
[root@3367881fd446 local]# ls
bin  games    lib    libexec                              sbin   src
etc  include  lib64  mysql-5.7.34-linux-glibc2.12-x86_64  share

# 创建软连接并修改属主属组
[root@3367881fd446 local]# ln -sv mysql-5.7.34-linux-glibc2.12-x86_64 mysql
'mysql' -> 'mysql-5.7.34-linux-glibc2.12-x86_64'

[root@3367881fd446 local]# ls -l
total 0
………………
lrwxrwxrwx 1 root root  35 Dec  3 08:24 mysql -> mysql-5.7.34-linux-glibc2.12-x86_64
drwxr-xr-x 9 root root 129 Dec  3 08:21 mysql-5.7.34-linux-glibc2.12-x86_64
drwxr-xr-x 2 root root   6 Nov  3  2020 sbin
drwxr-xr-x 5 root root  49 Sep 15 14:17 share
drwxr-xr-x 2 root root   6 Nov  3  2020 src

[root@3367881fd446 local]# chown -R mysql.mysql mysql*
[root@3367881fd446 local]# ls -l
total 0
……………………
lrwxrwxrwx 1 mysql mysql  35 Dec  3 08:24 mysql -> mysql-5.7.34-linux-glibc2.12-x86_64
drwxr-xr-x 9 mysql mysql 129 Dec  3 08:21 mysql-5.7.34-linux-glibc2.12-x86_64
drwxr-xr-x 2 root  root    6 Nov  3  2020 sbin
drwxr-xr-x 5 root  root   49 Sep 15 14:17 share
drwxr-xr-x 2 root  root    6 Nov  3  2020 src

# 添加环境变量
[root@3367881fd446 local]# echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
[root@3367881fd446 local]# bash
[root@3367881fd446 bin]# which mysql
/usr/local/mysql/bin/mysql

# 创建数据存放目录
[root@3367881fd446 local]# mkdir /opt/data
[root@3367881fd446 local]# ls -l /opt
total 0
drwxr-xr-x 2 root root 6 Dec  3 08:29 data

[root@3367881fd446 local]# chown -R mysql.mysql /opt/data
[root@3367881fd446 local]# ls -l /opt
total 0
drwxr-xr-x 2 mysql mysql 6 Dec  3 08:29 data

# 初始哈数据库不要密码
[root@3367881fd446 local]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/opt/data
2021-12-03T08:42:57.345198Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-12-03T08:42:57.466893Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-12-03T08:42:57.489097Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-12-03T08:42:57.542400Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 03bd41c9-5415-11ec-ae6b-0242ac110002.
2021-12-03T08:42:57.543336Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-12-03T08:42:58.297624Z 0 [Warning] CA certificate ca.pem is self signed.
2021-12-03T08:42:58.547329Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.


# 生成配置文件
[root@3367881fd446 local]# vi /etc/my.cnf
[mysqld]
port = 3306
datadir = /opt/data
basedir = /usr/local/mysql
socket = /tmp/mysql.sock
pid-file = /opt/data/mysql.pid
log-error = /opt/data/mysql.err
skip-name-resolve

# 修改文件
[root@3367881fd446 local]# vi /usr/local/mysql/support-files/mysql.server
……………………
basedir=/usr/local/mysql
datadir=/opt/data
……………………

# 启动
[root@3367881fd446 local]# ss -antl
State    Recv-Q   Send-Q     Local Address:Port       Peer Address:Port   Process   
LISTEN   0        128              0.0.0.0:80              0.0.0.0:*                
[root@3367881fd446 local]# /usr/local/mysql/support-files/mysql.server start
Starting MySQL.Logging to '/opt/data/mysql.err'.
 SUCCESS! 
[root@3367881fd446 local]# ss -antl
State    Recv-Q   Send-Q     Local Address:Port       Peer Address:Port   Process   
LISTEN   0        128              0.0.0.0:80              0.0.0.0:*                
LISTEN   0        80                     *:3306                  *:*                
# 登录设置密码
[root@3367881fd446 local]# mysql      
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set password = password('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> exit
Bye
[root@3367881fd446 local]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye

将MySQL提交为一个镜像

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE             COMMAND        CREATED             STATUS          PORTS  NAMES
2102e9a88ce8  centos:latest     "/bin/bash"    About an hour ago   Up 42 minutes          mysql01
2651ba6d2d5f  yunjisuanlp/nginx:v1 "/usr/local/nginx/sb…" About an hour ago   Up About an hour             confident_wing

[root@localhost ~]# docker commit -p mysql01 # 暂停mysql01

[root@localhost ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED         SIZE
                  77281e1fab7e   3 seconds ago   3.78GB  # 新提交的镜像
yunjisuanlp/nginx   v1        ac3319cbbafb   19 hours ago    550MB
centos              latest    5d0da3dc9764   2 months ago    231MB

[root@localhost ~]# docker tag 77281e1fab7e best2001/mysql:v2  # 起名

[root@localhost ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
best2001/nginx     v0.3      148fe5cb817d   32 minutes ago   569MB
best2001/mysql   v2        77281e1fab7e   About a minute ago   3.78GB # 成功
best2001/nginx     v0.2      943ccc9a6b39   8 hours ago      550MB
best2001/c1        v0.1      4b2af8fdacc7   30 hours ago     550MB
busybox            latest    d23834f29b38   3 days ago       1.24MB
centos             latest    5d0da3dc9764   2 months ago     231MB

你可能感兴趣的:(容器,centos,运维)