安装docker:
[root@docker1 ~]# yum install -y docker-ce docker-ce-cli (yum会解决依赖问题)
[root@docker1 ~]# systemctl start docker
[root@docker1 ~]# systemctl enable docker
实验一:2048小游戏
[root@docker1 ~]# docker load -i game2048.tar
[root@docker1 ~]# docker run -d --name rongqi1 -p 800:80 game2048
实验二: 容器的基本操作
-
创建交互式容器
docker load -i ubuntu
docker images
docker run -it --name rongqi ubuntu
##exit推出后 等同于ctrl+d 如果用ctrl+pq 此时只是退出命令行,后台仍然在运行
docker ps -a 会发现此时是退出状态
docker start rongqi
docker ps -a 会发现此时是运行状态
docker container attach rongqi 会连接容器
-
在已有镜像中升级更高版本镜像
mkdir /dock cd /dock vim dockerfile #大小写均可,但必须是这个名字。除非在配置文件修改默认文件名 FROM ubuntu RUN touch file{1..6} RUN echo "hello world" docker build -t ubuntu:jx1
##优化的镜像从cache里取和基础镜像相同的数据
docker build -t rhel7:jx1 .
vim dockerfile #随便添加一条指令(注意:添加在尾端)
docker build -t rhel7:jx2 .
docker history rhel7:jx2 #会发现除了添加的那条指令,前面的指令都是取自cache
- entrypoint与cmd的区别:
cmd会被覆盖,entrypoint不会被覆盖,一定会执行
mkdir /dock
cd /dock
vim dockerfile #大小写均可,但必须是这个名字。除非在配置文件修改默认文件名
FROM rhel7
WORKDIR /mnt #更换工作区间
ENV name world #定义变量
CMD echo "hello $name" #等于 CMD ["/bin/sh", "-c", "echo hello $name"]
vim dockerfile
FROM rhel7
WORKDIR /mnt
ENV name world
ENTRYPOINT ["/bin/echo", "hello"]
CMD ["world"]
docker built -t rhel7:jx1 .
docker run --rm rhel7:jx1 jingjing #运行容器完即删,不用命名 #jingjing会覆盖world
- 更换标签
tag
docker images #由于系统的默认是拉取lastest的镜像,所以可以更换tag标签
docker tag ubuntu:jx2 ubunru:lastest
docker pull ubuntu #默认是lastest,除非自己搭建仓库,否则这条命令没用
docker run -it --name rongqi3 ubuntu:jx1
docker rm -f rongqi3 #删除容器
docker rmi ubuntu:jx1 #删除镜像
#这两步可以调换顺序,如果先删除镜像,那么容器会自动挂在基本镜像上
注意:有时images会有缓存
docker images 出现none tag
docker rmi TMAGE ID #即可删除
其中TMAGE ID 是docker images 中的数据
实验三:利用容器快速搭建apach镜像
dockerfile文件:
vim dockerfile
FROM rhel7
COPY dvd.repo /etc/yum.repos.d/
RUN rpmdb --rebuilddb && yum install -y httpd
expose 80
volume ["/var/www/html"]
cmd ["/usr/sbin/httpd", "-D", "FOREGROUND"]
yum源:dvd文件
vim dvd.repo
[rhel]
name=rhel
baseurl=http://172.25.7.250/base7.3
gpgcheck=0
生成新的镜像和容器:
docker built -t rhel7:jx1 .
docker run -d --name ct1 rhel7:jx1 #由于此时将程序打入后台了,所以在删除容器的时候如果不退出,就需要强制删除:docker rm -f ct1
查看信息:
docker inspect ct1 #查看信息:挂载目录、分配的ip
curl 172.17.0.2 #可以看到首页
docker volume ls
编辑首页内容:
也可以自定本地挂载点
docker run -d --name ct2 -v /apachdata:/var/www/html -p 80:80 rhel7:jx1
docker inspect ct2
实验四:利用容器快速搭建nginx镜像
首先在/dock下要有nginx-1.15.8.tar.gz这个包
vim dockerfile
FROM rhel7
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.15.8.tar.gz /mnt
EXPOSE 80
WORKDIR /mnt/nginx-1.15.8
RUN rpmdb --rebuilddb && yum install -y gcc make zlib-devel pcre-devel
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
docker build -t rhel7:nginx .
docker run -d --name ct1 -p 80:80 rhel7:nginx
编辑首页内容:
也可以自定挂载点,如apache。不再赘述