Docker学习
一、安装Docker1.1、环境:centos7[twx@localhost ~]$ uname -aLinux localhost.localdomain 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux安装命令:sudo yum install -y doc
一、安装Docker
1.1、环境:centos7
[twx@localhost ~]$ uname -a
Linux localhost.localdomain 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
安装命令:sudo yum install -y docker
启动守护进程:sudo service docker start
[twx@localhost ~]$ sudo service docker start
Redirecting to /bin/systemctl start docker.service
[twx@localhost ~]$ sudo service docker status
Redirecting to /bin/systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since 一 2016-08-08 15:27:30 CST; 25s ago
Docs: http://docs.docker.com
二、Docker入门
2.1、检查docker程序信息
sudo docker info
该命令会返回所有容器和镜像的数量以及其他一些信息
2.2 创建容器
sudo docker run -i -t ubuntu /bin/bash
ubuntu 镜像名称
-i 标志保证容器中得STDIN(标准输入)是开启的
-t 为容器分配一个伪tty终端
ubuntu镜像是一个基础镜像(base image)。输入docker run命令时,会首先在本地检查是否存在ubuntu镜像,如果没有,就从远程仓库pull到本地,然后再根据此镜像创建容器。
[twx@localhost ~]$ sudo docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
Trying to pull repository docker.io/library/ubuntu ...
latest: Pulling from docker.io/library/ubuntu
43db9dbdcb30: Pull complete
2dc64e8f8d4f: Pull complete
670a583e1b50: Pull complete
183b0bfcd10e: Pull complete
Digest: sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54b
Status: Downloaded newer image for docker.io/ubuntu:latest
root@eaa81433c057:/#
容器创建成功后,会在容器中运行/bin/bash命令,启动bash shell。
我们可以输入hostname
查看容器的名字
root@eaa81433c057:/# hostname
eaa81433c057
2.3、退出容器
exit
一旦退出容器,/bin/bash命令也就结束了,随之容器也就停止了运行。
2.4、查看容器列表
sudo docker ps
查看正在运行的容器
sudo docker ps -a
查看所有容器
sudo docker ps -l
查看最后一次运行的容器
2.5、容器命名
[twx@localhost ~]$ sudo docker run --name twx_the_container -i -t ubuntu /bin/bash
root@ea5e6646e432:/#
通过–name+ 名称 就能创建一个指定名称的容器了。
2.6、启动/停止容器
sudo docker start/stop + 容器名称
[twx@localhost ~]$ sudo docker start twx_the_container
twx_the_container
[twx@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea5e6646e432 ubuntu "/bin/bash" 3 minutes ago Up 34 seconds twx_the_container
2.7、docker attach
2.8、创建守护式容器
[twx@localhost ~]$ sudo docker run --name daemon_dave -d ubuntu /bin/bash -c "while true;do echo hello world;sleep 1;done;"
[sudo] password for twx:
0df0744b2f405a4b79c55f574f37331dd0f8c7cdafe23903a82b04a272961e41
-d 将容器放到后台运行
2.9、查看容器内部日志
sudo docker logs + 容器名称
2.10、查看容器内部进程
sudo docker top+容器名称
sudo docker top daemon_dave
UID PID PPID C STIME TTY TIME CMD
root 9014 5145 0 16:11 ? 00:00:00
2.11、在容器内部运行进程
sudo docker exec + 参数+容器名称+命令
[twx@localhost ~]$ sudo docker exec -i -t daemon_dave /bin/bash
root@0df0744b2f40:/#
2.12、docker inspect
root@0df0744b2f40:/# sudo docker inspect daemon_dave
bash: sudo: command not found
root@0df0744b2f40:/# exit
exit
[twx@localhost ~]$ sudo docker inspect daemon_dave
[
{
"Id": "0df0744b2f405a4b79c55f574f37331dd0f8c7cdafe23903a82b04a272961e41",
"Created": "2016-08-08T08:11:37.29923545Z",
"Path": "/bin/bash",
"Args": [
"-c",
"while true;do echo hello world;sleep 1;done;"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 9014,
"ExitCode": 0,
"Error": "",
"StartedAt": "2016-08-08T08:11:37.950360729Z",
"FinishedAt": "0001-01-01T00:00:00Z"
}....
2.13、删除容器
sudo docker rm + 容器名称
运行中得docker容器是无法删除的。
三、使用Docker镜像和仓库
3.1、Docker的概念
自行Google
3.2、列出镜像
sudo docker images
本地镜像都保存在Docker宿主机的/var/lib/docker目录下。
3.3 拉取镜像
sudo docker pull +仓库名称/镜像名称
可以在仓库名后面加上一个冒号和标签名来指定该仓库中的某一镜像。
3.4 查找镜像
sudo docker search + 镜像名
[twx@localhost ~]$ sudo docker search shadowsocks
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/oddrationale/docker-shadowsocks shadowsocks Docker image 86 [OK]
docker.io docker.io/tommylau/shadowsocks 44 [OK]
docker.io docker.io/vimagick/shadowsocks-libev A lightweight secured socks5 proxy for emb... 38 [OK]
docker.io docker.io/shadowsocks/shadowsocks-libev 26 [OK]
docker.io docker.io/vimagick/shadowsocks A secure socks5 proxy, designed to protect... 9 [OK]
docker.io docker.io/menghan/shadowsocks shadowsocks server 6 [OK]
docker.io docker.io/imlonghao/shadowsocks-libev A docker image for shadowsocks-libev 4 [OK]
docker.io docker.io/frankzhang/shadowsocks-c A shadowsocks repo, https://github.com/zju... 2 [OK]
docker.io docker.io/imlonghao/shadowsocks-python A docker image for shadowsocks-python 2 [OK]
docker.io docker.io/baselibrary/shadowsocks shadowsocks 1 [OK]
docker.io docker.io/bluebu/shadowsocks-privoxy shadowsocks client for socks5 proxy privox... 1 [OK]
docker.io docker.io/chenzhiwei/shadowsocks Shadowsocks socket proxy. (Image size 77M) 1 [OK]
docker.io docker.io/gaoyifan/shadowsocks-manyuser shadowsocks manyuser 1 [OK]
3.5、构建镜像
构建镜像有两种方式:
1. commit
2. 使用docker build命令 和Dockerfile 文件
3.5.1 使用docker commit命令
- 登陆docker 账户
[twx@localhost ~]$ sudo docker login
Username (slimteaegg): slimteaegg
Password:
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded
- 进入刚创建的twx_the_container容器内部
sudo docker attach twx_the_container
- 接着更新一下apt包
root@ea5e6646e432:/# apt-get -y update
- 安装apache2
apt-get -y install apache2
- 退出容器,提交容器到我们的个人仓库
sudo docker commit twx_the_container slimteaegg/apache2
- 查看一下镜像列表
sudo docker images
[twx@localhost ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
slimteaegg/apache2 latest 7c048d3857dd 8 seconds ago 262.7 MB
docker.io/ubuntu latest 42118e3df429 2 weeks ago 124.8 MB
3.5.2、使用Dockerfile构建镜像
- 创建Dockerfile文件
mkdir static_web
cd static_web
touch Dockerfile
- 编辑Dockerfile
#Version:0.0.1
FROM ubuntu:latest
MAINTAINER Tangwenxing "twx843571091@gmail.com"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi,this is a test image' > /usr/share/nginx/html/index.html
EXPOSE 80
FROM:指定一个已经存在的镜像,后续指令都基于该镜像进行
MAINTAINER: 指定该镜像的作者以及作者的电子邮箱
RUN: 在当前镜像中运行指定的命令
EXPOSE:指定容器的端口。出于安全原因,Docker并不会自动打开该端口,而是需要在docker run 时指定需要打开哪些端口。
- 开始执行构建命令
cd static_web
sudo docker build -t="slimteaegg/static_web" .
-t 为新镜像设定仓库和名称
该命令最后的.告诉Docker到本地目录中去找Dockerfile文件
- 构建成功以后,查看一下镜像列表
[twx@localhost static_web]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
slimteaegg/static_web latest 7b096462ae9d 36 seconds ago 220.4 MB
slimteaegg/apache2 latest 7c048d3857dd 13 minutes ago 262.7 MB
docker.io/ubuntu latest 42118e3df429 2 weeks ago 124.8 MB
3.6、基于新构建的镜像启动容器
[twx@localhost static_web]$ sudo docker run -d -p 80 --name static_web slimteaegg/static_web nginx -g "daemon off;"
2c8e63093254bf1c34814ea8af97861940cf069aa63ff5114fc0116952e0a514
-d 告诉docker以分离(Detached)的方式在后台运行
-p 的用法有几种:
1.-p + 端口号 宿主机随机分配一个端口映射到容器端口号上
2. -p 8080:80 将宿主机的8080端口映射到容器80端口上。
Docker提供了一种更简单的方式,即-P参数。该参数可以用来对外公开在Dockerfile中得EXPOSE指令中设置的所有端口
sudo docker run -d -P --name static_web slimteaegg/static_web nginx -g "daemon off;"
该命令会将容器内的80端口对宿主机公开,并且绑定到宿主机的一个随机端口上。
3.6.1、docker port命令
docker port + 容器名+ 容器端口号
返回宿主机映射的端口号
[twx@localhost static_web]$ sudo docker port static_web 80
0.0.0.0:32768
3.7、Dockerfile指令
3.7.1、CMD
3.7.2、ENTRYPOINT
3.7.3、WORKDIR
3.7.4、ENV
3.7.5、USER
3.7.6、VOLUME
3.7.7、ADD
3.7.9、ONBUILD
3.8、将镜像推送到Docker Hub
sudo docker push slimteaegg/static_web
更多推荐
所有评论(0)