容器题目

1、使用docker compose编写一个启动nginx的yaml文件,网页内容自定义并且映射,创建一个卷挂载nginx的主要目录

  • 编写一个nginx的dockerfile

  • 然后编写一个yaml文件


[root@docker ~]# cat dockercompose.yml 
services:
  web:
     build:
       context: ./nginx/  # dockerfile处于的目录
       dockerfile: dockerfile  # dockerfile文件名
     image: nginx:v2  # 构建的镜像名字
     container_name: web-nginx
     restart: always
     pull_policy: never  # 镜像本地存在,就不需要从docker hub上面进行拉取
     ports:
       - 8081:80
     volumes:
       - nginx_data:/etc/nginx/  # 容器卷:容器挂载的目录
       - ./nginx/index.html:/usr/share/nginx/html/index.html # 宿主机文件:挂载到容器文件
     networks:  # 使用的网络,列表的形式
       - web-app
networks:  # 顶级,字典形式,不能使用列表形式
  web-app:
volumes:
  nginx_data:

2、搭建一个wordpress博客

  • wordpress编写的时候需要添加环境变量才行

  • 拉取wordpress和mysql镜像

[root@docker yaml]# cat d-wordpress.yaml 
services:
  wordpress:
    image: wordpress:latest
    container_name: wordpress
    links:
    - db:dbhe  # 做了一个连接 将db起了个别名为dbhe
    environment:
    - WORDPRESS_DB_HOST=dbhe  # 连接mysql数据库的主机地址
    - WORDPRESS_DB_USER=root  # 连接数据库使用的账号
    - WORDPRESS_DB_PASSWORD=root # 连接数据库使用的密码
    - WORDPRESS_DB_NAME=wordpress  # 连接数据库使用的库的名字
    ports:
    - "8080:80"
  db:
    image: mysql:latest
    container_name: w_db  # 容器的名字
    environment:
    - MYSQL_ROOT_PASSWORD=root  # 登录mysql的密码
    - MYSQL_DATABASE=wordpress  # 在mysql中会创建一个数据库为wordpress的库


3、ssh密码登录和免密的容器

[root@docker yaml]# cat d-sshfile 
FROM centos:8.4.2105
RUN minorver=8.4.2105 && \
sed -e "s|^mirrorlist=|#mirrorlist=|g" \
         -e "s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://mirrors.aliyun.com/centos-vault/$minorver|g" \
         -i.bak /etc/yum.repos.d/CentOS-*.repo
RUN yum clean all && yum makecache
RUN  yum -y install passwd openssh-clients openssh-server net-tools
RUN ssh-keygen -A
RUN echo "123" | passwd --stdin root 
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

# 远程连接
[root@docker yaml]# ssh 192.168.50.10 -p 32768

  • 免密登录
[root@docker yaml]# cat d-msshfile 
FROM centos:8.4.2105
RUN minorver=8.4.2105 && \
sed -e "s|^mirrorlist=|#mirrorlist=|g" \
         -e "s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://mirrors.aliyun.com/centos-vault/$minorver|g" \
         -i.bak /etc/yum.repos.d/CentOS-*.repo
RUN yum clean all && yum makecache
RUN  yum -y install passwd openssh-clients openssh-server net-tools
RUN ssh-keygen -A
RUN mkdir -p /root/.ssh 
COPY id_rsa.pub /root/.ssh/authorized_keys
RUN chmod 700 /root/.ssh && \  # 目录的权限
chmod 600 /root/.ssh/authorized_keys && \  # 密钥的权限
chown -R root:root /root/.ssh/  
RUN echo "123" | passwd --stdin root 
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

4、创建一个mysql容器

  • 如果单独的创建会出现一个问题,就是密码的问题,需要设置密码,也就是传入一个环境变量
[root@docker ~]# docker run -tid --name db --restart always -p 33333:3306 -e "MYSQL_ROOT_PASSWORD=123" -e "MYSQL_DATABASE=qwe" mysql
353ae020d6087b43842ddc0dda39dc22b15bbcf4b91a179819a1055159c71f73
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS        PORTS                                                    NAMES
353ae020d608   mysql     "docker-entrypoint.s…"   1 second ago   Up 1 second   33060/tcp, 0.0.0.0:33333->3306/tcp, :::33333->3306/tcp   db

# 登录容器里面mysql,指定映射到主机的端口,就能登录上了
[root@docker ~]# mysql -uroot -p123 -P 33333 -h 127.0.0.1 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qwe                |
| sys                |
+--------------------+
5 rows in set (0.006 sec)

MySQL [(none)]> 

5、命令搭建wordpress(--link搭建)

  • --link 这个就是做了一个链接,创建了一个容器a数据库的,创建一个网站服务器b,这个时候对a起一个别名,然后通过这个别名来进行访问这个容器a

  • 先不要删除,先关闭a容器,创建一个c容器,然后再来启动,观察a容器ip地址

  • 这个就是一个流程,先不使用--link来实现的话

  • 没有使用--link

  • 通过db的ip地址,blog与db进行通信,但是关闭的了db的容器,创建了一个新的话,ip地址就会发生改变

docker run -tid --name db --restart always -e "MYSQL_ROOT_PASSWORD=123" -e "MYSQL_DATABASE=wordpress" mysql

docker run -tid --name blog -v /web:/var/www/html/ -p 80:80 -e WORDPRESS_DB_HOST=172.17.0.2 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=123 -e WORDPRESS_DB_NAME=wordpress wordpress

[root@docker web]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                               NAMES
5ff5d19f1d90   wordpress   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   blog
46c2e50c70c1   mysql       "docker-entrypoint.s…"   5 minutes ago   Up 5 minutes   3306/tcp, 33060/tcp                 db

  • 关闭db容器,创建一个新容器,就会把这个db容器的ip地址占用,重新开启db容器的话,就会出现问题
docker run -tid --name c1 centos

# 占用了这个172.17.0.2这个ip地址
[root@docker ~]# docker inspect c1 |grep -i ipaddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

  • 再次开启db容器的话,因为是通过ip地址来与db进行通信的,ip地址发生改变,就无法通信了

  • 使用--link

  • 就是对db容器起一个别名,容器b通过这个别名来进行访问db容器,这样的话,关闭db容器,也能实现访问

[root@docker ~]# docker run -tid --name db --restart always -e "MYSQL_ROOT_PASSWORD=123" -e "MYSQL_DATABASE=wordpress" mysql

# 通过--link就可以了
[root@docker ~]# docker run -tid --name blog -v /web:/var/www/html/ -p 80:80 --link db:dbbm -e WORDPRESS_DB_HOST=dbbm -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=123 -e WORDPRESS_DB_NAME=wordpress wordpress

# 关闭db容器
[root@docker ~]# docker stop db
db

#创建一个新容器
[root@docker ~]# docker run -tid --name c1 centos
17a4f701bc975a493cc43013d6f88891463419a8e6bffe2010ff7652a57aba33

# 再次开启db容器,虽然ip地址会发生变化,但是不影响,因为blog容器通过别名来进行访问
[root@docker ~]# docker start db
db

  • 因此实验结束,关闭db容器,不能删除,可能这2个生命周期,属性等等,发生了变化,执行这个2个操作的话,比较的话

6、docker save和load

  • 这个命令就是用来保存镜像和导入镜像的,在离线的环境中进行操作

  • 主要就是在没有网络的情况下,使用镜像,一般是在内网的环境中

7、docker commit 命令

  • 这个主要就是基于现有的容器将其打包成一个镜像,然后基于这个镜像进行创建

  • 一般就是将一个已经操作好的容器(里面就是已经安装了一些命令),打包成一个镜像

  • 但是的话,这个不是很常用,因为他会默认启动最后一个命令,有可能会启动不起来

posted @ 2025-09-05 22:27  乔的港口  阅读(10)  评论(0)    收藏  举报