下载基础镜像
测试:
用ubuntu镜像输出hello world 如果没有ubuntu镜像,docker会默认给下载个最新的ubuntu镜像
docker run ubuntu echo 'hello world'
以交互式运行
docker run -i -t ubuntu /bin/bash #
-i --interactive=ture|false 默认是false 始终打开标准输入
-t --tty=true|false 默认是false 为docker分配个伪tty终端
这样新创建的容器才能提供个交互式的shell
在ubuntu容器中就和在ubuntu服务器一样 执行ps -ef 测试 exit退出
docker attach 容器id能进去容器
ctrl+q+p能退出后台执行容器
添加各种依赖
-
添加ppa仓库 这个是OpenJDK 8 ppa仓库。
add-apt-repository ppa:openjdk-r/ppa
-
更新ubuntu的下载指令
apt-get update
-
安装openjdk8
apt-get install openjdk-8-jdk
-
安装curl
apt install curl
-
安装vim
apt-get install -y vim
-
安装sz rz
apt-get install lrzsz
-
安装net指令库
apt install net-tools 解决:用ifconfig查看
-
安装zip unzip
apt-get install unzip apt-get install zip
对于已经建立的docker容器,需要新增容器对主机的端口映射,主要分为三种:
通过修改配置文件修改docker容器端口映射
-
使用docker ps -a命令找到要修改容器的CONTAINER ID
-
运行以下命令,进入该容器目录
docker inspect【CONTAINER ID】| grep Id
cd /var/lib/docker/containers
-
停止容器
docker stop [容器id]
-
停止主机docker服务
systemctl stop docker
-
进入2得到的文件夹内,修改hostconfig.json 和 config.v2.json
vi hostconfig.json
比如新增一个 80 端口,在PortBindings下边添加以下内容,端口配置之间用英文字符逗号隔开 "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "80" } ] 接着修改vi config.v2.json, 找到ExposedPorts和Ports 仿照之前内容添加端口映射 "ExposedPorts": { "2000/tcp": {} }, "Ports":{ "2000/tcp":[ { "HostIp": "0.0.0.0", "HostPort": "2000" } ] },
-
保存之后重启docker服务和容器
systemctl start docker docker start [docker id]
把运行中的容器生成新的镜像,再新建容器
-
提交一个运行中的容器为镜像
docker commit [containerid] [new_imagename]
-
运行新建的镜像并添加端口映射(宿主机8000映射到docker的8080)
docker run --name newcontainername -d -p 8000:8080 [imagename] /bin/sh
修改主机iptables端口映射
docker的端口映射并不是在docker技术中实现的,而是通过宿主机的iptables来实现。通过控制网桥来做端口映射,类似路由器中设置路由端口映射。
如果我们有一个容器的8000端口映射到主机的9000端口,先查看iptabes设置了什么规则:
sudo iptables -t nat -vnL
结果中有一条:
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
98 5872 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0
237 14316 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 to:172.17.0.3:8000
我们可以看到docker创建了一个名为DOKCER的自定义的链条Chain。而我开放8000端口的容器的ip是172.17.0.3。
也可以通过inspect命令查看容器ip
docker inspect [containerId] |grep IPAddress
我们想再增加一个端口映射,比如8081->81,就在这个链条是再加一条规则:
sudo iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:81
加错了或者想修改:先显示行号查看
sudo iptables -t nat -vnL DOCKER --line-number
删除规则3
sudo iptables -t nat -D DOCKER 3
容器常用命令
停止容器
docker stop 容器名称或id
启动容器
docker start 容器名称或id
使用之前构建的容器修改映射端口重新构建镜像和容器
例子:(第一种尝试不成功第二种成功)
docker ps可以查看运行的容器 加-a可以看已停止的容器
以运行的容器id 1f65f1ecc62d 构建新镜像image1
docker commit 1f65f1ecc62d image1
以image1镜像构建运行的容器tommao
docker run --name tommao -p 8089:8080 -i -t image1 /bin/bash
进入运行的容器
docker attach tommao
启动java项目
nohup java -jar demo-0.0.1-SNAPSHOT.jar >/dev/null &
Ctrl+q+p退出后台运行容器
启动后按回车别按ctrl +c那是终止命令
来源:oschina
链接:https://my.oschina.net/u/3730149/blog/4486390