容器题目
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 命令
-
这个主要就是基于现有的容器将其打包成一个镜像,然后基于这个镜像进行创建
-
一般就是将一个已经操作好的容器(里面就是已经安装了一些命令),打包成一个镜像
-
但是的话,这个不是很常用,因为他会默认启动最后一个命令,有可能会启动不起来

浙公网安备 33010602011771号