宿主机环境
centos7.0
安装docker
删除旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装docker CE
安装docker CE有以下方式:
- 大量用户通过设置docker repositories来安装
- 通过RPM安装包的方式安装
- 在测试和开发环境,还可以通过convenience scripts脚本来安装 我使用docker repositories安装。
设置docker repositories
1.先安装需要的软件包,yum-utils、yum-config-manager、device-mapper-persistent-data和lvm2
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
2.设置源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3.安装docker ce
sudo yum install docker-ce docker-ce-cli containerd.io
上面命令默认安装最新的latest版本。如果不想安装最新的版本,可以安装特定的版本。
查看线上docker版本
yum list docker-ce --showduplicates | sort -r
安装特定版本
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
4.启动docker
sudo systemctl start docker
docker默认从国外镜像下载文件,网速非常慢,可以更换成国内的镜像,对于使用systemd的系统,请在 /etc/docker/daemon.json 中写入如下内容,如果文件不存在可以新建该文件
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}
安装部署tomcat
1.查看本地镜像
docker image ls
可以看到本地没有tomcat镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 5 months ago 1.84kB
2.下载tomcat镜像
docker pull tomcat
再次查看本地镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 5377fd8533c3 3 days ago 506MB
hello-world latest fce289e99eb9 5 months ago 1.84kB
3.通过镜像运行容器
docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat
- --name tomcat 容器名称
- -p 8080:8080 将容器的8080端口映射到宿主机的8080
- -v $PWD/test:/usr/local/tomcat/webapps/test 将容器的一个目录映射到宿主机的一个目录
- -d tomcat 通过镜像名称指定哪个镜像
4.查看当前运行的容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c588a96d275e tomcat "catalina.sh run" 6 seconds ago Up 4 seconds 0.0.0.0:8080->8080/tcp tomcat
5.修改tomcat配置
如果要修改tomcat的配置,有多种方式,我通过进入容器里面像一般linux服务器一样修改配置文件在将当前容器重新生成一个新的镜像来实现。
docker exec -it c588a96d275e bash
docker容器的操作系统是ubuntu版本的linux,运行apt-get update和apt-get install来安装没有的命令。
比如已经进入容器通过修改tomcat的server.xml文件修改tomcat的请求端口为8090,退出容器后,再次查看当前运行的容器。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c588a96d275e tomcat "catalina.sh run" 29 minutes ago Up 29 minutes 0.0.0.0:8080->8080/tcp tomcat
使用 commit 命令重新生成新的镜像
docker commit -a "linjinzhi" -m "change tomcat port to 8090" 896c8f3abf78 tomcat_8090:v1.0
查看当前的本地镜像
docker images
如下
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat_8090 v1.0 4826f527e496 5 seconds ago 554MB
tomcat latest 5377fd8533c3 3 days ago 506MB
hello-world latest fce289e99eb9 5 months ago 1.84kB
运行新的容器
docker run --name tomcat_8090 -p 8090:8090 -v $PWD/test:/usr/local/tomcat_8090/webapps/test -d tomcat_8090:v1.0
如下打印信息并请求8090端口说明新的tomcat已经运行
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be03c552cad2 tomcat_8090:v1.0 "catalina.sh run" 10 seconds ago Up 9 seconds 8080/tcp, 0.0.0.0:8090->8090/tcp tomcat_8090
896c8f3abf78 tomcat "catalina.sh run" 32 minutes ago Up 32 minutes 0.0.0.0:8080->8080/tcp tomcat
备注
1.删除本地镜像
docker rmi <IMAGE ID>
2.kill掉一个容器
docker kill <CONTAINER ID>
当重新run一个容器时却爆如下异常
$ docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat
docker: Error response from daemon: Conflict. The container name "/tomcat" is already in use by container "c588a96d275eb010480029011d05023796012f8bf2735e2fa9590958084b9b62". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
查看全部运行种的容器发现容器实际上还存在
docker ps -l
打印出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c588a96d275e tomcat "catalina.sh run" About an hour ago Exited (137) 14 minutes ago tomcat
删除这个容器
docker rm c588a96d275e
再次run的时候就可以了。
参考
参考
docker官网:https://docs.docker.com/install/linux/docker-ce/centos/
docker教程:https://www.runoob.com/docker/docker-tutorial.html https://yeasy.gitbooks.io/docker_practice/kubernetes/
docker hub:https://hub.docker.com/
docker常用命令:https://docs.docker.com/engine/reference/run/