为什么用docker就不介绍了
我是用的是ubantu的系统,ubantu的安装(自己百度把,太简单了,什么都不用配置)
条件
Docker 需要两个重要的安装要求:
它仅适用于 64 位 Linux 安装 它需要 Linux 内核版本 3.10 或更高版本。
要查看当前的内核版本,请打开终端并键入 uname -r 命令以查看内核版本:
lusifer@UbuntuBase:~$ uname -r
4.4.0-21-generic
查看操作系统是32位还是64位:
lusifer@UbuntuBase:~$ uname --m
x86_64
安装 Docker
lusifer@UbuntuBase:~$ curl -sSL https://get.daocloud.io/docker |sh
# Executing docker install script, commit: 49ee7c1 + sudo -E sh -c apt-get update -qq >/dev/null + sudo -E sh -c apt-get install -y -qq apt-transport-https ca-certificates curl softwar e-properties-common >/dev/null + sudo -E sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null + sudo -E sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial edge" > /etc/apt/sources.list.d/docker.list + [ ubuntu = debian ]
72+ sudo -E sh -c apt-get update -qq >/dev/null + sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null + sudo -E sh -c docker version Client: Version: 17.10.0-ce API version: 1.33 Go version: go1.8.3 Git commit: f4ffd25 Built: Tue Oct 17 19:04:16 2017 OS/Arch: linux/amd64
Server: Version: 17.10.0-ce API version: 1.33 (minimum version 1.12) Go version: go1.8.3 Git commit: f4ffd25 Built: Tue Oct 17 19:02:56 2017 OS/Arch: linux/amd64 Experimental: false If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like:
sudo usermod -aG docker lusifer
Remember that you will have to log out and back in for this to take effect!
WARNING: Adding a user to the "docker" group will grant the ability to run containers which can be used to obtain root privileges on the docker host. Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attac k-surface for more information.
看到如下表示成功
If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like:
sudo usermod -aG docker lusifer
Remember that you will have to log out and back in for this to take effect!
然后赋予用户操作权限,这一步不做非root用户没有权限操作docker
lusifer是我的主机名
sudo usermod -aG docker lusifer
启动 Docker 后台服务
service docker start
更改image的地址
vi /lib/systemd/system/docker.service
添加这个地址--registry-mirror=https://jxus37ac.mirror.aliyuncs.com
保存配置:
systemctl daemon-reload
重启服务:
service docker restart
docker启动测试
Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello Docker”
lusifer@UbuntuBase:~$ docker run ubuntu:15.10 /bin/echo "Hello Docker"
Hello Docker
可以交互的容器
这个命令执行后
lusifer@UbuntuBase:~$ docker run -it ubuntu:15.10 /bin/bash
这一行就是docker的交互命令
root@76ab065de67b:/#
退出容器:
- 运行 exit
- 使用 CTRL + D
后台模式运行容器
lusifer@UbuntuBase:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello docker; sleep 1; done"
会显示容器的id,唯一
0977407542d16c5699a2cc0455d977cb5d8ef011a1a762cdcf2323851f6b3ed3
查看运行中的容器
lusifer@UbuntuBase:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED ST ATUS PORTS NAMES
0977407542d1 ubuntu:15.10 "/bin/sh -c 'while..." 2 seconds ago Up 1 second thirsty_kowalevski
CONTAINER ID:容器ID
NAMES:自动分配的容器名称
查看容器日志
lusifer@UbuntuBase:~$ docker logs 容器ID 或者 自动分配的容器名称
hello docker
hello docker
hello docker
hello docker
停止容器
lusifer@UbuntuBase:~$ docker stop thirsty_kowalevski
thirsty_kowalevski
lusifer@UbuntuBase:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
帮助
docker 或者docker --help
列出本地镜像
lusifer@UbuntuBase:~$ docker images
REPOSITORY TAG IMAGE ID
CREATED SIZE ubuntu 15.10
9b9cb95443b5 15 months ago 137MB training/webapp
latest 6fae60ef3446 2 years ago 349MB
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
获取镜像
lusifer@UbuntuBase:~$ docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu bae382666908:。。。Status: Downloaded newer image for ubuntu:14.04
查找镜像
lusifer@UbuntuBase:~$ docker search ubuntu
创建自己的镜像
使用 Dockerfile 指令来创建一个新的镜像
docker build -f /path/to/a/Dockerfile
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 2fe8c403f348 3 seconds ago 64.2MB
给自定义的image添加REPOSITORY和tag
hht@hht-virtual-machine:/usr/local/docker$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hht 01 2fe8c403f348 32 seconds ago 64.2MB
一个简单的Dockerfile
FROM ubuntu
MAINTAINER Lusifer
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd lusifer
RUN /bin/echo 'lusifer:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22 EXPOSE 80
CMD /usr/sbin/sshd -D
更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器:
lusifer@UbuntuBase:~$ docker run -it ubuntu:15.10 /bin/bash
root@9a3dcafd7a83:/# apt-get update
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit 命令来退出这个容器。
此时ID为 9a3dcafd7a83 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。
lusifer@UbuntuBase:~$ docker commit -m="has update" -a="lusifer" 9a3dcafd7a83 lusifer/ubuntu:v2
sha256:2642b4944b285974e5f007f30bc33b651220ea9931982c3c53b61a8f8fd5011b
- -m:提交的描述信息
- -a:指定镜像作者
- 9a3dcafd7a83:容器ID,在使用docker run启动容器时有一个id,例如下图的root@后面就是容器id
- lusifer/ubuntu:v2:指定要创建的目标镜像名
用上面的查看镜像的命令查看
文件交互
docker容器与机器怎么实现文件交互
首先,启动docker容器,假设docker run启动容器时id为9a3dcafd7a83
sudo docker cp root/jdk-8u131-linux-x64.tar.gz 9a3dcafd7a83:/root
安装jdk
tar zxvf jdk-8u181-linux-x64.tar.gz
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
source /etc/profile
然后更新镜像,如何更新看上面
或者dockerfile安装jdk
dockerfile