3 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
1.啟動(dòng)一個(gè)Docker容器
[root@localhost ~]# docker run -i -t Ubuntu /bin/bash
Unable to find image ‘ubuntu’ locally
Pulling repository ubuntu
04c5d3b7b065: Download complete
511136ea3c5a: Download complete
c7b7c6419568: Download complete
70c8faa62a44: Download complete
d735006ad9c1: Download complete
Status: Downloaded newer image for ubuntu:latest
注:
-i:打開(kāi)容器中的STDIN
-t:為容器分配一個(gè)偽tty終端
從上面我們可以看出,首先Docker會(huì)檢查本地是否存在ubuntu鏡像,如果在本地沒(méi)有找到該鏡像的話,那么Docker就會(huì)去官方的Docker Hub Registry查看Docker Hub中是否有該鏡像。Docker一旦找到該鏡像,就會(huì)下載該鏡像并將其保存到本地的宿主機(jī)中。
然后,Docker在文件系統(tǒng)內(nèi)部用這個(gè)鏡像創(chuàng)建了一個(gè)新的容器。該容器擁有自己的網(wǎng)絡(luò)、IP地址,以及一個(gè)用來(lái)可以和宿主機(jī)進(jìn)行通信的橋接網(wǎng)絡(luò)接口。最后,我們告訴Docker在新容器中要運(yùn)行什么命令。
當(dāng)容器創(chuàng)建完畢之后,Docker就會(huì)執(zhí)行容器中的/bin/bash命令。這時(shí)間我們就可以看到容器內(nèi)的shell
root@8c342c0c275c:/#
注:8c342c0c275c代表容器的ID
2.使用容器
查看該容器的主機(jī)名
root@8c342c0c275c:/# hostname
8c342c0c275c
可以看到,容器的主機(jī)名就是該容器的ID
查看該主機(jī)的hosts文件
root@8c342c0c275c:/# cat /etc/hosts
172.17.0.2 8c342c0c275c
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 localhost
?。海? localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
可以看到Docker為該容器的IP地址添加了一條主機(jī)配置項(xiàng)。
查看該容器的IP地址
root@8c342c0c275c:/# ip a
1: lo: 《LOOPBACK,UP,LOWER_UP》 mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
4: eth0: 《BROADCAST,UP,LOWER_UP》 mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:2/64 scope link
valid_lft forever preferred_lft forever
查看容器中運(yùn)行的進(jìn)程
root@8c342c0c275c:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 18168 1976 ? Ss 09:38 0:00 /bin/bash
root 19 0.0 0.0 15568 1144 ? R+ 09:55 0:00 ps -aux

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
步驟1:為我們的容器創(chuàng)建第一個(gè)鏡像
# 以 centos 鏡像作為基礎(chǔ)鏡像,我們啟動(dòng)自己的容器并在其中執(zhí)行/bin/bash命令
# 注:-t -i 參數(shù)用于創(chuàng)建一個(gè)虛擬的命令行。
sudo docker run -t -i centos /bin/bash
現(xiàn)在我們已經(jīng)成功的運(yùn)行了自己的第一個(gè)容器,并且進(jìn)入到容器的命令行界面中。在容器中,我們執(zhí)行下面的命令:
yum -y update # 更新軟件包
yum install which # 安裝which命令
yum install git # 安裝Git
安裝完成后,按 Ctrl + d 來(lái)退出容器的命令行。
# 執(zhí)行sudo docker ps -a,可以看到被我們終止的容器
CONTAINER ID IMAGE COMMAND CREATED……
da9031d3568f centos:6.4 /bin/bash 5 minutes ago…..
把我們所做的改變提交到一個(gè)新的容器:
# 這里我們創(chuàng)建一個(gè)自己的基礎(chǔ)容器,容器中安裝好了文章中所需的常用工具。讀者的容器 id 可能與文章中的有所不同,以上一步 docker ps -a 的結(jié)果為準(zhǔn)。
sudo docker commit da90 custom/base
容器成功提交后,執(zhí)行 sudo docker images ,我們會(huì)看到剛才提交的容器(如下面的結(jié)果所示)。我們就以這個(gè)容器為基礎(chǔ)容器,再來(lái)創(chuàng)建一個(gè)新的容器。
REPOSITORY TAG IMAGE ID CREATED
custom/base latest 05b6cecd370b 2 minutes ago
centos 6.4 539c0211cd76 10 months ago
centos latest 539c0211cd76 10 months ago…
步驟2:創(chuàng)建新的容器,并安裝 apache
# 以 custom/base 容器為基礎(chǔ),運(yùn)行一個(gè)新的容器。
sudo docker run -t -i custom/base /bin/bash
# 安裝 httpd
yum install httpd
步驟3:再次提交新的容器
按 Ctrl + d 來(lái)退出容器的命令行,然后執(zhí)行命令:
# 這個(gè)命令會(huì)把步驟2中我們安裝 httpd 帶來(lái)的改變提交到新的名為 custom/httpd 的容器鏡像中。你的容器 id 可能會(huì)和文章中有所不同,以 sudo docker ps -a 命令的結(jié)果為準(zhǔn)。
sudo docker commit aa6e2fc0b94c custom/httpd
你應(yīng)該已經(jīng)發(fā)現(xiàn)了,我們創(chuàng)建了一個(gè)帶有 http 服務(wù)器并可以復(fù)用的容器鏡像。你可以根據(jù)這種思想,為自己所需的每個(gè)組件都創(chuàng)建一個(gè)容器,然后把這些容器復(fù)用于開(kāi)發(fā)環(huán)境或者生產(chǎn)環(huán)境。
步驟7:運(yùn)行 http 服務(wù)器
# -v will Mount a volume from VM to the container which was also shared from host to Vagrant VM.
# -v 參數(shù)把主機(jī)共享給虛擬機(jī)的一個(gè)卷掛載到容器中
# -p forward VM port 80 to container port 80; VM port 80 is mapped to host port 8080 in Vagrantfile
# -p 參數(shù)把虛擬機(jī)的80端口映射到容器的80端口;虛擬機(jī)的80端口在 Vagrantfile 中被綁定到主機(jī)的8080端口,也就是:主機(jī)8080->虛擬機(jī)80->容器80
sudo docker run -t -i -p 80:80 -v /vagrant/htdocs:/var/www/html custom/httpd /bin/bash
# 啟動(dòng) Apache
apachectl -k start

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
1 docker pull mysql
2 docker run -v /data/var/mysql/:/var/lib/mysql -e YSQL_ROOT_PASSWORD=kS4pJUIb mysql
3 docker stop [CONTAINER ID]
4 docker run -it -v /data/var/mysql/:/var/lib/mysql mysql /bin/bash
5 mysqld_safe&
6 grant all privileges on *.* to 'wuxiao'@'%' identified by 'password';
7 docker cp [CONTAINER ID]:/etc/mysql/my.cnf /data/local/my.cnf
8 docker stop [CONTAINER ID]
9 docker run -d -p 3306:3306 -v /data/var/mysql/:/var/lib/mysql -v /data/local/my.cnf:/etc/mysql/my.cnf mysql
10 add [CMD] to /etc/rc.local
11 OK!
添加回答
舉報(bào)